From aa343f1285f1ffd92f7a30ff7a12c916b0787ea2 Mon Sep 17 00:00:00 2001 From: qxz15oi Date: Thu, 8 Apr 2021 20:28:00 +0200 Subject: [PATCH] runtime/openshift onboardings --- .../alerting-profile/alerting-profile.yaml | 90 ++- .../{agent-service.json => default.json} | 47 +- .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_agent-service/dashboard/README.md | 13 + .../CD_agent-service/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json} | 57 +- .../management-zone/management-zone.yaml | 24 +- .../CD_agent-service/notification/README.md | 60 ++ .../CD_agent-service/notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json} | 47 +- .../calculated-metrics-service/README.md | 10 + .../CD_aluis/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_aluis/dashboard/README.md | 13 + .../CD_aluis/dashboard/dashboard.yaml | 59 ++ .../CD_aluis/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_aluis/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_aluis/management-zone/README.md | 76 +++ .../management-zone/default.json} | 57 +- .../management-zone/management-zone.yaml | 6 + .../CD_aluis/notification/README.md | 60 ++ .../CD_aluis/notification/email.json | 13 + .../CD_aluis/notification/msTeams.json | 11 + .../CD_aluis/notification/notification.yaml | 51 ++ .../CD_aluis/synthetic-monitor/README.md | 37 ++ .../CD_aluis/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json} | 47 +- .../calculated-metrics-service/README.md | 10 + .../CD_am-casa/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_am-casa/dashboard/README.md | 13 + .../CD_am-casa/dashboard/dashboard.yaml | 59 ++ .../CD_am-casa/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_am-casa/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_am-casa/management-zone/README.md | 76 +++ .../management-zone/default.json} | 57 +- .../management-zone/management-zone.yaml | 6 + .../CD_am-casa/notification/README.md | 60 ++ .../CD_am-casa/notification/email.json | 13 + .../CD_am-casa/notification/msTeams.json | 11 + .../CD_am-casa/notification/notification.yaml | 51 ++ .../CD_am-casa/synthetic-monitor/README.md | 37 ++ .../CD_am-casa/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json} | 47 +- .../calculated-metrics-service/README.md | 10 + .../CD_am-cesim/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_am-cesim/dashboard/README.md | 13 + .../CD_am-cesim/dashboard/dashboard.yaml | 59 ++ .../CD_am-cesim/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_am-cesim/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_am-cesim/management-zone/README.md | 76 +++ .../management-zone/default.json} | 57 +- .../management-zone/management-zone.yaml | 6 + .../CD_am-cesim/notification/README.md | 60 ++ .../CD_am-cesim/notification/email.json | 13 + .../CD_am-cesim/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../CD_am-cesim/synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_am-cns/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_am-cns/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_am-cns/dashboard/README.md | 13 + .../CD_am-cns/dashboard/dashboard.yaml | 59 ++ .../CD_am-cns/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_am-cns/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_am-cns/management-zone/README.md | 76 +++ .../CD_am-cns/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_am-cns/notification/README.md | 60 ++ .../CD_am-cns/notification/email.json | 13 + .../CD_am-cns/notification/msTeams.json | 11 + .../CD_am-cns/notification/notification.yaml | 51 ++ .../CD_am-cns/synthetic-monitor/README.md | 37 ++ .../CD_am-cns/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_am-device/dashboard/README.md | 13 + .../CD_am-device/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_am-device/management-zone/README.md | 76 +++ .../CD_am-device/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_am-device/notification/README.md | 60 ++ .../CD_am-device/notification/email.json | 13 + .../CD_am-device/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../CD_am-device/synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_am-ecs/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_am-ecs/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_am-ecs/dashboard/README.md | 13 + .../CD_am-ecs/dashboard/dashboard.yaml | 59 ++ .../CD_am-ecs/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_am-ecs/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_am-ecs/management-zone/README.md | 76 +++ .../CD_am-ecs/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_am-ecs/notification/README.md | 60 ++ .../CD_am-ecs/notification/email.json | 13 + .../CD_am-ecs/notification/msTeams.json | 11 + .../CD_am-ecs/notification/notification.yaml | 51 ++ .../CD_am-ecs/synthetic-monitor/README.md | 37 ++ .../CD_am-ecs/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_am-egim/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_am-egim/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_am-egim/dashboard/README.md | 13 + .../CD_am-egim/dashboard/dashboard.yaml | 59 ++ .../CD_am-egim/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_am-egim/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_am-egim/management-zone/README.md | 76 +++ .../CD_am-egim/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_am-egim/notification/README.md | 60 ++ .../CD_am-egim/notification/email.json | 13 + .../CD_am-egim/notification/msTeams.json | 11 + .../CD_am-egim/notification/notification.yaml | 51 ++ .../CD_am-egim/synthetic-monitor/README.md | 37 ++ .../CD_am-egim/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_am-esim-ui/dashboard/README.md | 13 + .../CD_am-esim-ui/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_am-esim-ui/management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_am-esim-ui/notification/README.md | 60 ++ .../CD_am-esim-ui/notification/email.json | 13 + .../CD_am-esim-ui/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../CD_am-esim-ui/synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_am-lmcs/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_am-lmcs/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_am-lmcs/dashboard/README.md | 13 + .../CD_am-lmcs/dashboard/dashboard.yaml | 59 ++ .../CD_am-lmcs/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_am-lmcs/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_am-lmcs/management-zone/README.md | 76 +++ .../CD_am-lmcs/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_am-lmcs/notification/README.md | 60 ++ .../CD_am-lmcs/notification/email.json | 13 + .../CD_am-lmcs/notification/msTeams.json | 11 + .../CD_am-lmcs/notification/notification.yaml | 51 ++ .../CD_am-lmcs/synthetic-monitor/README.md | 37 ++ .../CD_am-lmcs/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_am-mno-manager/dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_am-mno-manager/notification/README.md | 60 ++ .../CD_am-mno-manager/notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_am-proxy/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_am-proxy/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_am-proxy/dashboard/README.md | 13 + .../CD_am-proxy/dashboard/dashboard.yaml | 59 ++ .../CD_am-proxy/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_am-proxy/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_am-proxy/management-zone/README.md | 76 +++ .../CD_am-proxy/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_am-proxy/notification/README.md | 60 ++ .../CD_am-proxy/notification/email.json | 13 + .../CD_am-proxy/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../CD_am-proxy/synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_am-store/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_am-store/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_am-store/dashboard/README.md | 13 + .../CD_am-store/dashboard/dashboard.yaml | 59 ++ .../CD_am-store/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_am-store/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_am-store/management-zone/README.md | 76 +++ .../CD_am-store/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_am-store/notification/README.md | 60 ++ .../CD_am-store/notification/email.json | 13 + .../CD_am-store/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../CD_am-store/synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_am-svms/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_am-svms/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_am-svms/dashboard/README.md | 13 + .../CD_am-svms/dashboard/dashboard.yaml | 59 ++ .../CD_am-svms/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_am-svms/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_am-svms/management-zone/README.md | 76 +++ .../CD_am-svms/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_am-svms/notification/README.md | 60 ++ .../CD_am-svms/notification/email.json | 13 + .../CD_am-svms/notification/msTeams.json | 11 + .../CD_am-svms/notification/notification.yaml | 51 ++ .../CD_am-svms/synthetic-monitor/README.md | 37 ++ .../CD_am-svms/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_am-ui/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_am-ui/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_am-ui/dashboard/README.md | 13 + .../CD_am-ui/dashboard/dashboard.yaml | 59 ++ .../CD_am-ui/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_am-ui/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_am-ui/management-zone/README.md | 76 +++ .../CD_am-ui/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_am-ui/notification/README.md | 60 ++ .../CD_am-ui/notification/email.json | 13 + .../CD_am-ui/notification/msTeams.json | 11 + .../CD_am-ui/notification/notification.yaml | 51 ++ .../CD_am-ui/synthetic-monitor/README.md | 37 ++ .../CD_am-ui/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_am-usage/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_am-usage/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_am-usage/dashboard/README.md | 13 + .../CD_am-usage/dashboard/dashboard.yaml | 59 ++ .../CD_am-usage/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_am-usage/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_am-usage/management-zone/README.md | 76 +++ .../CD_am-usage/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_am-usage/notification/README.md | 60 ++ .../CD_am-usage/notification/email.json | 13 + .../CD_am-usage/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../CD_am-usage/synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_am-vms/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_am-vms/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_am-vms/dashboard/README.md | 13 + .../CD_am-vms/dashboard/dashboard.yaml | 59 ++ .../CD_am-vms/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_am-vms/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_am-vms/management-zone/README.md | 76 +++ .../CD_am-vms/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_am-vms/notification/README.md | 60 ++ .../CD_am-vms/notification/email.json | 13 + .../CD_am-vms/notification/msTeams.json | 11 + .../CD_am-vms/notification/notification.yaml | 51 ++ .../CD_am-vms/synthetic-monitor/README.md | 37 ++ .../CD_am-vms/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_asbc-pki-oclisc2v/dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_asbc-pki-oclisocsp/dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_asbc-sfa-oh/dashboard/README.md | 13 + .../CD_asbc-sfa-oh/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_asbc-sfa-oh/management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_asbc-sfa-oh/notification/README.md | 60 ++ .../CD_asbc-sfa-oh/notification/email.json | 13 + .../CD_asbc-sfa-oh/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_asbc-sts/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_asbc-sts/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_asbc-sts/dashboard/README.md | 13 + .../CD_asbc-sts/dashboard/dashboard.yaml | 59 ++ .../CD_asbc-sts/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_asbc-sts/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_asbc-sts/management-zone/README.md | 76 +++ .../CD_asbc-sts/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_asbc-sts/notification/README.md | 60 ++ .../CD_asbc-sts/notification/email.json | 13 + .../CD_asbc-sts/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../CD_asbc-sts/synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_asbctvp/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_asbctvp/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_asbctvp/dashboard/README.md | 13 + .../CD_asbctvp/dashboard/dashboard.yaml | 59 ++ .../CD_asbctvp/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_asbctvp/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_asbctvp/management-zone/README.md | 76 +++ .../CD_asbctvp/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_asbctvp/notification/README.md | 60 ++ .../CD_asbctvp/notification/email.json | 13 + .../CD_asbctvp/notification/msTeams.json | 11 + .../CD_asbctvp/notification/notification.yaml | 51 ++ .../CD_asbctvp/synthetic-monitor/README.md | 37 ++ .../CD_asbctvp/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_avs-client-service/dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_b2v-com-be/dashboard/README.md | 13 + .../CD_b2v-com-be/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_b2v-com-be/management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_b2v-com-be/notification/README.md | 60 ++ .../CD_b2v-com-be/notification/email.json | 13 + .../CD_b2v-com-be/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../CD_b2v-com-be/synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_b2v-com-echo/dashboard/README.md | 13 + .../CD_b2v-com-echo/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_b2v-com-echo/management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_b2v-com-echo/notification/README.md | 60 ++ .../CD_b2v-com-echo/notification/email.json | 13 + .../CD_b2v-com-echo/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_b2v-com-fe/dashboard/README.md | 13 + .../CD_b2v-com-fe/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_b2v-com-fe/management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_b2v-com-fe/notification/README.md | 60 ++ .../CD_b2v-com-fe/notification/email.json | 13 + .../CD_b2v-com-fe/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../CD_b2v-com-fe/synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_b2v-com-hello/dashboard/README.md | 13 + .../CD_b2v-com-hello/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_b2v-com-hello/notification/README.md | 60 ++ .../CD_b2v-com-hello/notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_b2v-nots/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_b2v-nots/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_b2v-nots/dashboard/README.md | 13 + .../CD_b2v-nots/dashboard/dashboard.yaml | 59 ++ .../CD_b2v-nots/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_b2v-nots/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_b2v-nots/management-zone/README.md | 76 +++ .../CD_b2v-nots/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_b2v-nots/notification/README.md | 60 ++ .../CD_b2v-nots/notification/email.json | 13 + .../CD_b2v-nots/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../CD_b2v-nots/synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_b2v-sms-statistics/dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_bsi-service/dashboard/README.md | 13 + .../CD_bsi-service/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../CD_bsi-service/management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_bsi-service/notification/README.md | 60 ++ .../CD_bsi-service/notification/email.json | 13 + .../CD_bsi-service/notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_cac/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_cac/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_cac/dashboard/README.md | 13 + .../CD_cac/dashboard/dashboard.yaml | 59 ++ .../CD_cac/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_cac/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_cac/management-zone/README.md | 76 +++ .../CD_cac/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_cac/notification/README.md | 60 ++ .../CD_cac/notification/email.json | 13 + .../CD_cac/notification/msTeams.json | 11 + .../CD_cac/notification/notification.yaml | 51 ++ .../CD_cac/synthetic-monitor/README.md | 37 ++ .../CD_cac/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_cdc/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_cdc/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_cdc/dashboard/README.md | 13 + .../CD_cdc/dashboard/dashboard.yaml | 59 ++ .../CD_cdc/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_cdc/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_cdc/management-zone/README.md | 76 +++ .../CD_cdc/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_cdc/notification/README.md | 60 ++ .../CD_cdc/notification/email.json | 13 + .../CD_cdc/notification/msTeams.json | 11 + .../CD_cdc/notification/notification.yaml | 51 ++ .../CD_cdc/synthetic-monitor/README.md | 37 ++ .../CD_cdc/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_cdcicd-jenkins/dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_cdcicd-jenkins/notification/README.md | 60 ++ .../CD_cdcicd-jenkins/notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 90 ++- .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 24 +- .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 90 ++- .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 24 +- .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_cm/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_cm/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_cm/dashboard/README.md | 13 + .../CD_cm/dashboard/dashboard.yaml | 59 ++ .../CD_cm/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_cm/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_cm/management-zone/README.md | 76 +++ .../CD_cm/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_cm/notification/README.md | 60 ++ .../CD_cm/notification/email.json | 13 + .../CD_cm/notification/msTeams.json | 11 + .../CD_cm/notification/notification.yaml | 51 ++ .../CD_cm/synthetic-monitor/README.md | 37 ++ .../CD_cm/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_commute-service/dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_commute-service/notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../dashboard/dashboard.yaml | 8 +- .../dashboard/defaultPRODE2E.json | 312 +--------- .../synthetic-monitor/README.md | 29 +- .../synthetic-monitor/default.json | 19 +- .../synthetic-monitor/synthetic-monitor.yaml | 4 +- .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_csu/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_csu/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_csu/dashboard/README.md | 13 + .../CD_csu/dashboard/dashboard.yaml | 59 ++ .../CD_csu/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_csu/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_csu/management-zone/README.md | 76 +++ .../CD_csu/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_csu/notification/README.md | 60 ++ .../CD_csu/notification/email.json | 13 + .../CD_csu/notification/msTeams.json | 11 + .../CD_csu/notification/notification.yaml | 51 ++ .../CD_csu/synthetic-monitor/README.md | 37 ++ .../CD_csu/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_ctns-event-origin/dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_ctns-marketing-api/dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_ctns-vehicle-api/dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_dealercockpit/dashboard/README.md | 13 + .../CD_dealercockpit/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_dealercockpit/notification/README.md | 60 ++ .../CD_dealercockpit/notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_delivery/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_delivery/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_delivery/dashboard/README.md | 13 + .../CD_delivery/dashboard/dashboard.yaml | 59 ++ .../CD_delivery/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_delivery/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_delivery/management-zone/README.md | 76 +++ .../CD_delivery/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_delivery/notification/README.md | 60 ++ .../CD_delivery/notification/email.json | 13 + .../CD_delivery/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../CD_delivery/synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 90 ++- .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 24 +- .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 90 ++- .../alerting-profile/default.json | 103 +++ .../digital-key-composite-service.json | 92 --- .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 61 +- .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../digital-key-composite-service.json | 233 ------- .../CDdigital-key-composite-service.json | 91 --- .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 24 +- .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_dsd/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_dsd/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_dsd/dashboard/README.md | 13 + .../CD_dsd/dashboard/dashboard.yaml | 59 ++ .../CD_dsd/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_dsd/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_dsd/management-zone/README.md | 76 +++ .../CD_dsd/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_dsd/notification/README.md | 60 ++ .../CD_dsd/notification/email.json | 13 + .../CD_dsd/notification/msTeams.json | 11 + .../CD_dsd/notification/notification.yaml | 51 ++ .../CD_dsd/synthetic-monitor/README.md | 37 ++ .../CD_dsd/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_eadb/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_eadb/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_eadb/dashboard/README.md | 13 + .../CD_eadb/dashboard/dashboard.yaml | 59 ++ .../CD_eadb/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_eadb/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_eadb/management-zone/README.md | 76 +++ .../CD_eadb/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_eadb/notification/README.md | 60 ++ .../CD_eadb/notification/email.json | 13 + .../CD_eadb/notification/msTeams.json | 11 + .../CD_eadb/notification/notification.yaml | 51 ++ .../CD_eadb/synthetic-monitor/README.md | 37 ++ .../CD_eadb/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_ercaf/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_ercaf/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_ercaf/dashboard/README.md | 13 + .../CD_ercaf/dashboard/dashboard.yaml | 59 ++ .../CD_ercaf/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_ercaf/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_ercaf/management-zone/README.md | 76 +++ .../CD_ercaf/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_ercaf/notification/README.md | 60 ++ .../CD_ercaf/notification/email.json | 13 + .../CD_ercaf/notification/msTeams.json | 11 + .../CD_ercaf/notification/notification.yaml | 51 ++ .../CD_ercaf/synthetic-monitor/README.md | 37 ++ .../CD_ercaf/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_ercr/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_ercr/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_ercr/dashboard/README.md | 13 + .../CD_ercr/dashboard/dashboard.yaml | 59 ++ .../CD_ercr/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_ercr/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_ercr/management-zone/README.md | 76 +++ .../CD_ercr/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_ercr/notification/README.md | 60 ++ .../CD_ercr/notification/email.json | 13 + .../CD_ercr/notification/msTeams.json | 11 + .../CD_ercr/notification/notification.yaml | 51 ++ .../CD_ercr/synthetic-monitor/README.md | 37 ++ .../CD_ercr/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_erd/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_erd/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_erd/dashboard/README.md | 13 + .../CD_erd/dashboard/dashboard.yaml | 59 ++ .../CD_erd/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_erd/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_erd/management-zone/README.md | 76 +++ .../CD_erd/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_erd/notification/README.md | 60 ++ .../CD_erd/notification/email.json | 13 + .../CD_erd/notification/msTeams.json | 11 + .../CD_erd/notification/notification.yaml | 51 ++ .../CD_erd/synthetic-monitor/README.md | 37 ++ .../CD_erd/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_esh/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_esh/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_esh/dashboard/README.md | 13 + .../CD_esh/dashboard/dashboard.yaml | 59 ++ .../CD_esh/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_esh/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_esh/management-zone/README.md | 76 +++ .../CD_esh/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_esh/notification/README.md | 60 ++ .../CD_esh/notification/email.json | 13 + .../CD_esh/notification/msTeams.json | 11 + .../CD_esh/notification/notification.yaml | 51 ++ .../CD_esh/synthetic-monitor/README.md | 37 ++ .../CD_esh/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_fmc/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_fmc/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_fmc/dashboard/README.md | 13 + .../CD_fmc/dashboard/dashboard.yaml | 59 ++ .../CD_fmc/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_fmc/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_fmc/management-zone/README.md | 76 +++ .../CD_fmc/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_fmc/notification/README.md | 60 ++ .../CD_fmc/notification/email.json | 13 + .../CD_fmc/notification/msTeams.json | 11 + .../CD_fmc/notification/notification.yaml | 51 ++ .../CD_fmc/synthetic-monitor/README.md | 37 ++ .../CD_fmc/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_hpauth/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_hpauth/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_hpauth/dashboard/README.md | 13 + .../CD_hpauth/dashboard/dashboard.yaml | 59 ++ .../CD_hpauth/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_hpauth/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_hpauth/management-zone/README.md | 76 +++ .../CD_hpauth/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_hpauth/notification/README.md | 60 ++ .../CD_hpauth/notification/email.json | 13 + .../CD_hpauth/notification/msTeams.json | 11 + .../CD_hpauth/notification/notification.yaml | 51 ++ .../CD_hpauth/synthetic-monitor/README.md | 37 ++ .../CD_hpauth/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_hubtab-service/dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_hubtab-service/notification/README.md | 60 ++ .../CD_hubtab-service/notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 90 ++- .../alerting-profile/default.json | 103 +++ .../alerting-profile/id-lookup-service.json | 92 --- .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_id-lookup-service/dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/CDid-lookup-service.json | 91 --- .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 24 +- .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_ids-admin/dashboard/README.md | 13 + .../CD_ids-admin/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_ids-admin/management-zone/README.md | 76 +++ .../CD_ids-admin/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_ids-admin/notification/README.md | 60 ++ .../CD_ids-admin/notification/email.json | 13 + .../CD_ids-admin/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../CD_ids-admin/synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_ids-svds/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_ids-svds/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_ids-svds/dashboard/README.md | 13 + .../CD_ids-svds/dashboard/dashboard.yaml | 59 ++ .../CD_ids-svds/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_ids-svds/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_ids-svds/management-zone/README.md | 76 +++ .../CD_ids-svds/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_ids-svds/notification/README.md | 60 ++ .../CD_ids-svds/notification/email.json | 13 + .../CD_ids-svds/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../CD_ids-svds/synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_ids-sync/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_ids-sync/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_ids-sync/dashboard/README.md | 13 + .../CD_ids-sync/dashboard/dashboard.yaml | 59 ++ .../CD_ids-sync/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_ids-sync/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_ids-sync/management-zone/README.md | 76 +++ .../CD_ids-sync/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_ids-sync/notification/README.md | 60 ++ .../CD_ids-sync/notification/email.json | 13 + .../CD_ids-sync/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../CD_ids-sync/synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_ids-ws/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_ids-ws/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_ids-ws/dashboard/README.md | 13 + .../CD_ids-ws/dashboard/dashboard.yaml | 59 ++ .../CD_ids-ws/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_ids-ws/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_ids-ws/management-zone/README.md | 76 +++ .../CD_ids-ws/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_ids-ws/notification/README.md | 60 ++ .../CD_ids-ws/notification/email.json | 13 + .../CD_ids-ws/notification/msTeams.json | 11 + .../CD_ids-ws/notification/notification.yaml | 51 ++ .../CD_ids-ws/synthetic-monitor/README.md | 37 ++ .../CD_ids-ws/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../image-composite-service.json | 14 - .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 90 ++- .../alerting-profile/default.json | 103 +++ .../alerting-profile/imiles-service.json | 92 --- .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_imiles-service/dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/CDimiles-service.json | 91 --- .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 24 +- .../CD_imiles-service/notification/README.md | 60 ++ .../CD_imiles-service/notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_ipa-gateway/dashboard/README.md | 13 + .../CD_ipa-gateway/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../CD_ipa-gateway/management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_ipa-gateway/notification/README.md | 60 ++ .../CD_ipa-gateway/notification/email.json | 13 + .../CD_ipa-gateway/notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_jdssp21/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_jdssp21/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_jdssp21/dashboard/README.md | 13 + .../CD_jdssp21/dashboard/dashboard.yaml | 59 ++ .../CD_jdssp21/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_jdssp21/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_jdssp21/management-zone/README.md | 76 +++ .../CD_jdssp21/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_jdssp21/notification/README.md | 60 ++ .../CD_jdssp21/notification/email.json | 13 + .../CD_jdssp21/notification/msTeams.json | 11 + .../CD_jdssp21/notification/notification.yaml | 51 ++ .../CD_jdssp21/synthetic-monitor/README.md | 37 ++ .../CD_jdssp21/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_legacy-sar-service/dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 90 ++- .../alerting-profile/default.json | 103 +++ .../legal-document-composite-service.json | 92 --- .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../CDlegal-document-composite-service.json | 91 --- .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 24 +- .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_lsc-kc/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_lsc-kc/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_lsc-kc/dashboard/README.md | 13 + .../CD_lsc-kc/dashboard/dashboard.yaml | 59 ++ .../CD_lsc-kc/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_lsc-kc/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_lsc-kc/management-zone/README.md | 76 +++ .../CD_lsc-kc/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_lsc-kc/notification/README.md | 60 ++ .../CD_lsc-kc/notification/email.json | 13 + .../CD_lsc-kc/notification/msTeams.json | 11 + .../CD_lsc-kc/notification/notification.yaml | 51 ++ .../CD_lsc-kc/synthetic-monitor/README.md | 37 ++ .../CD_lsc-kc/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_lsc-mm/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_lsc-mm/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_lsc-mm/dashboard/README.md | 13 + .../CD_lsc-mm/dashboard/dashboard.yaml | 59 ++ .../CD_lsc-mm/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_lsc-mm/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_lsc-mm/management-zone/README.md | 76 +++ .../CD_lsc-mm/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_lsc-mm/notification/README.md | 60 ++ .../CD_lsc-mm/notification/email.json | 13 + .../CD_lsc-mm/notification/msTeams.json | 11 + .../CD_lsc-mm/notification/notification.yaml | 51 ++ .../CD_lsc-mm/synthetic-monitor/README.md | 37 ++ .../CD_lsc-mm/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_lsc-oc/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_lsc-oc/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_lsc-oc/dashboard/README.md | 13 + .../CD_lsc-oc/dashboard/dashboard.yaml | 59 ++ .../CD_lsc-oc/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_lsc-oc/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_lsc-oc/management-zone/README.md | 76 +++ .../CD_lsc-oc/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_lsc-oc/notification/README.md | 60 ++ .../CD_lsc-oc/notification/email.json | 13 + .../CD_lsc-oc/notification/msTeams.json | 11 + .../CD_lsc-oc/notification/notification.yaml | 51 ++ .../CD_lsc-oc/synthetic-monitor/README.md | 37 ++ .../CD_lsc-oc/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_lsc-og/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_lsc-og/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_lsc-og/dashboard/README.md | 13 + .../CD_lsc-og/dashboard/dashboard.yaml | 59 ++ .../CD_lsc-og/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_lsc-og/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_lsc-og/management-zone/README.md | 76 +++ .../CD_lsc-og/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_lsc-og/notification/README.md | 60 ++ .../CD_lsc-og/notification/email.json | 13 + .../CD_lsc-og/notification/msTeams.json | 11 + .../CD_lsc-og/notification/notification.yaml | 51 ++ .../CD_lsc-og/synthetic-monitor/README.md | 37 ++ .../CD_lsc-og/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_mds/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_mds/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_mds/dashboard/README.md | 13 + .../CD_mds/dashboard/dashboard.yaml | 59 ++ .../CD_mds/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_mds/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_mds/management-zone/README.md | 76 +++ .../CD_mds/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_mds/notification/README.md | 60 ++ .../CD_mds/notification/email.json | 13 + .../CD_mds/notification/msTeams.json | 11 + .../CD_mds/notification/notification.yaml | 51 ++ .../CD_mds/synthetic-monitor/README.md | 37 ++ .../CD_mds/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_mlc/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_mlc/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_mlc/dashboard/README.md | 13 + .../CD_mlc/dashboard/dashboard.yaml | 59 ++ .../CD_mlc/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_mlc/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_mlc/management-zone/README.md | 76 +++ .../CD_mlc/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_mlc/notification/README.md | 60 ++ .../CD_mlc/notification/email.json | 13 + .../CD_mlc/notification/msTeams.json | 11 + .../CD_mlc/notification/notification.yaml | 51 ++ .../CD_mlc/synthetic-monitor/README.md | 37 ++ .../CD_mlc/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_mrp/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_mrp/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_mrp/dashboard/README.md | 13 + .../CD_mrp/dashboard/dashboard.yaml | 59 ++ .../CD_mrp/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_mrp/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_mrp/management-zone/README.md | 76 +++ .../CD_mrp/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_mrp/notification/README.md | 60 ++ .../CD_mrp/notification/email.json | 13 + .../CD_mrp/notification/msTeams.json | 11 + .../CD_mrp/notification/notification.yaml | 51 ++ .../CD_mrp/synthetic-monitor/README.md | 37 ++ .../CD_mrp/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_mrpspringboot/dashboard/README.md | 13 + .../CD_mrpspringboot/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_mrpspringboot/notification/README.md | 60 ++ .../CD_mrpspringboot/notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_nop-admin/dashboard/README.md | 13 + .../CD_nop-admin/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_nop-admin/management-zone/README.md | 76 +++ .../CD_nop-admin/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_nop-admin/notification/README.md | 60 ++ .../CD_nop-admin/notification/email.json | 13 + .../CD_nop-admin/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../CD_nop-admin/synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_nop-archive/dashboard/README.md | 13 + .../CD_nop-archive/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_nop-archive/management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_nop-archive/notification/README.md | 60 ++ .../CD_nop-archive/notification/email.json | 13 + .../CD_nop-archive/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_nop-provisioning/dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_nop-trigger/dashboard/README.md | 13 + .../CD_nop-trigger/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_nop-trigger/management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_nop-trigger/notification/README.md | 60 ++ .../CD_nop-trigger/notification/email.json | 13 + .../CD_nop-trigger/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_oclisc2v/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_oclisc2v/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_oclisc2v/dashboard/README.md | 13 + .../CD_oclisc2v/dashboard/dashboard.yaml | 59 ++ .../CD_oclisc2v/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_oclisc2v/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_oclisc2v/management-zone/README.md | 76 +++ .../CD_oclisc2v/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_oclisc2v/notification/README.md | 60 ++ .../CD_oclisc2v/notification/email.json | 13 + .../CD_oclisc2v/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../CD_oclisc2v/synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_oclisocsp/dashboard/README.md | 13 + .../CD_oclisocsp/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_oclisocsp/management-zone/README.md | 76 +++ .../CD_oclisocsp/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_oclisocsp/notification/README.md | 60 ++ .../CD_oclisocsp/notification/email.json | 13 + .../CD_oclisocsp/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../CD_oclisocsp/synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_omc-cd-services/dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_omc-cd-services/notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_omg/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_omg/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_omg/dashboard/README.md | 13 + .../CD_omg/dashboard/dashboard.yaml | 59 ++ .../CD_omg/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_omg/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_omg/management-zone/README.md | 76 +++ .../CD_omg/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_omg/notification/README.md | 60 ++ .../CD_omg/notification/email.json | 13 + .../CD_omg/notification/msTeams.json | 11 + .../CD_omg/notification/notification.yaml | 51 ++ .../CD_omg/synthetic-monitor/README.md | 37 ++ .../CD_omg/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_pdmmanager/dashboard/README.md | 13 + .../CD_pdmmanager/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_pdmmanager/management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_pdmmanager/notification/README.md | 60 ++ .../CD_pdmmanager/notification/email.json | 13 + .../CD_pdmmanager/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../CD_pdmmanager/synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_pmuimapper-service/dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_recall-tcn-service/dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 90 ++- .../alerting-profile/default.json | 103 +++ .../remote-360-composite-service.json | 92 --- .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../CDremote-360-composite-service.json | 91 --- .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 24 +- .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_remote-service/dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_remote-service/notification/README.md | 60 ++ .../CD_remote-service/notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_rsu-adapter/dashboard/README.md | 13 + .../CD_rsu-adapter/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_rsu-adapter/management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_rsu-adapter/notification/README.md | 60 ++ .../CD_rsu-adapter/notification/email.json | 13 + .../CD_rsu-adapter/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_rsu/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_rsu/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_rsu/dashboard/README.md | 13 + .../CD_rsu/dashboard/dashboard.yaml | 59 ++ .../CD_rsu/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_rsu/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_rsu/management-zone/README.md | 76 +++ .../CD_rsu/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_rsu/notification/README.md | 60 ++ .../CD_rsu/notification/email.json | 13 + .../CD_rsu/notification/msTeams.json | 11 + .../CD_rsu/notification/notification.yaml | 51 ++ .../CD_rsu/synthetic-monitor/README.md | 37 ++ .../CD_rsu/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_sbr/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_sbr/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_sbr/dashboard/README.md | 13 + .../CD_sbr/dashboard/dashboard.yaml | 59 ++ .../CD_sbr/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_sbr/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_sbr/management-zone/README.md | 76 +++ .../CD_sbr/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_sbr/notification/README.md | 60 ++ .../CD_sbr/notification/email.json | 13 + .../CD_sbr/notification/msTeams.json | 11 + .../CD_sbr/notification/notification.yaml | 51 ++ .../CD_sbr/synthetic-monitor/README.md | 37 ++ .../CD_sbr/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_scb/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_scb/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_scb/dashboard/README.md | 13 + .../CD_scb/dashboard/dashboard.yaml | 59 ++ .../CD_scb/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_scb/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_scb/management-zone/README.md | 76 +++ .../CD_scb/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_scb/notification/README.md | 60 ++ .../CD_scb/notification/email.json | 13 + .../CD_scb/notification/msTeams.json | 11 + .../CD_scb/notification/notification.yaml | 51 ++ .../CD_scb/synthetic-monitor/README.md | 37 ++ .../CD_scb/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_scc/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_scc/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_scc/dashboard/README.md | 13 + .../CD_scc/dashboard/dashboard.yaml | 59 ++ .../CD_scc/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_scc/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_scc/management-zone/README.md | 76 +++ .../CD_scc/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_scc/notification/README.md | 60 ++ .../CD_scc/notification/email.json | 13 + .../CD_scc/notification/msTeams.json | 11 + .../CD_scc/notification/notification.yaml | 51 ++ .../CD_scc/synthetic-monitor/README.md | 37 ++ .../CD_scc/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_scm-agentreg/dashboard/README.md | 13 + .../CD_scm-agentreg/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_scm-agentreg/management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_scm-agentreg/notification/README.md | 60 ++ .../CD_scm-agentreg/notification/email.json | 13 + .../CD_scm-agentreg/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_scm-scm/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_scm-scm/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_scm-scm/dashboard/README.md | 13 + .../CD_scm-scm/dashboard/dashboard.yaml | 59 ++ .../CD_scm-scm/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_scm-scm/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_scm-scm/management-zone/README.md | 76 +++ .../CD_scm-scm/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_scm-scm/notification/README.md | 60 ++ .../CD_scm-scm/notification/email.json | 13 + .../CD_scm-scm/notification/msTeams.json | 11 + .../CD_scm-scm/notification/notification.yaml | 51 ++ .../CD_scm-scm/synthetic-monitor/README.md | 37 ++ .../CD_scm-scm/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_scma-backend/dashboard/README.md | 13 + .../CD_scma-backend/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_scma-backend/management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_scma-backend/notification/README.md | 60 ++ .../CD_scma-backend/notification/email.json | 13 + .../CD_scma-backend/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 90 ++- .../alerting-profile/default.json | 103 +++ .../alerting-profile/send-to-car-service.json | 92 --- .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../CDsend-to-car-service.json | 91 --- .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 24 +- .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_service-manager/dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_service-manager/notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_sfa-fre/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_sfa-fre/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_sfa-fre/dashboard/README.md | 13 + .../CD_sfa-fre/dashboard/dashboard.yaml | 59 ++ .../CD_sfa-fre/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_sfa-fre/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_sfa-fre/management-zone/README.md | 76 +++ .../CD_sfa-fre/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_sfa-fre/notification/README.md | 60 ++ .../CD_sfa-fre/notification/email.json | 13 + .../CD_sfa-fre/notification/msTeams.json | 11 + .../CD_sfa-fre/notification/notification.yaml | 51 ++ .../CD_sfa-fre/synthetic-monitor/README.md | 37 ++ .../CD_sfa-fre/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_sfa-ota/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_sfa-ota/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_sfa-ota/dashboard/README.md | 13 + .../CD_sfa-ota/dashboard/dashboard.yaml | 59 ++ .../CD_sfa-ota/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_sfa-ota/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_sfa-ota/management-zone/README.md | 76 +++ .../CD_sfa-ota/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_sfa-ota/notification/README.md | 60 ++ .../CD_sfa-ota/notification/email.json | 13 + .../CD_sfa-ota/notification/msTeams.json | 11 + .../CD_sfa-ota/notification/notification.yaml | 51 ++ .../CD_sfa-ota/synthetic-monitor/README.md | 37 ++ .../CD_sfa-ota/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_sfa-vs/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_sfa-vs/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_sfa-vs/dashboard/README.md | 13 + .../CD_sfa-vs/dashboard/dashboard.yaml | 59 ++ .../CD_sfa-vs/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_sfa-vs/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_sfa-vs/management-zone/README.md | 76 +++ .../CD_sfa-vs/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_sfa-vs/notification/README.md | 60 ++ .../CD_sfa-vs/notification/email.json | 13 + .../CD_sfa-vs/notification/msTeams.json | 11 + .../CD_sfa-vs/notification/notification.yaml | 51 ++ .../CD_sfa-vs/synthetic-monitor/README.md | 37 ++ .../CD_sfa-vs/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_sfa/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_sfa/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_sfa/dashboard/README.md | 13 + .../CD_sfa/dashboard/dashboard.yaml | 59 ++ .../CD_sfa/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_sfa/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_sfa/management-zone/README.md | 76 +++ .../CD_sfa/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_sfa/notification/README.md | 60 ++ .../CD_sfa/notification/email.json | 13 + .../CD_sfa/notification/msTeams.json | 11 + .../CD_sfa/notification/notification.yaml | 51 ++ .../CD_sfa/synthetic-monitor/README.md | 37 ++ .../CD_sfa/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_srmanager/dashboard/README.md | 13 + .../CD_srmanager/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_srmanager/management-zone/README.md | 76 +++ .../CD_srmanager/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_srmanager/notification/README.md | 60 ++ .../CD_srmanager/notification/email.json | 13 + .../CD_srmanager/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../CD_srmanager/synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_stm/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_stm/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_stm/dashboard/README.md | 13 + .../CD_stm/dashboard/dashboard.yaml | 59 ++ .../CD_stm/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_stm/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_stm/management-zone/README.md | 76 +++ .../CD_stm/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_stm/notification/README.md | 60 ++ .../CD_stm/notification/email.json | 13 + .../CD_stm/notification/msTeams.json | 11 + .../CD_stm/notification/notification.yaml | 51 ++ .../CD_stm/synthetic-monitor/README.md | 37 ++ .../CD_stm/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_svcinfo/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_svcinfo/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_svcinfo/dashboard/README.md | 13 + .../CD_svcinfo/dashboard/dashboard.yaml | 59 ++ .../CD_svcinfo/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_svcinfo/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_svcinfo/management-zone/README.md | 76 +++ .../CD_svcinfo/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_svcinfo/notification/README.md | 60 ++ .../CD_svcinfo/notification/email.json | 13 + .../CD_svcinfo/notification/msTeams.json | 11 + .../CD_svcinfo/notification/notification.yaml | 51 ++ .../CD_svcinfo/synthetic-monitor/README.md | 37 ++ .../CD_svcinfo/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_timer-service/dashboard/README.md | 13 + .../CD_timer-service/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_timer-service/notification/README.md | 60 ++ .../CD_timer-service/notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_timers-processor/dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_tol-mgu/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_tol-mgu/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_tol-mgu/dashboard/README.md | 13 + .../CD_tol-mgu/dashboard/dashboard.yaml | 59 ++ .../CD_tol-mgu/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_tol-mgu/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_tol-mgu/management-zone/README.md | 76 +++ .../CD_tol-mgu/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_tol-mgu/notification/README.md | 60 ++ .../CD_tol-mgu/notification/email.json | 13 + .../CD_tol-mgu/notification/msTeams.json | 11 + .../CD_tol-mgu/notification/notification.yaml | 51 ++ .../CD_tol-mgu/synthetic-monitor/README.md | 37 ++ .../CD_tol-mgu/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_tol-tssb/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_tol-tssb/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_tol-tssb/dashboard/README.md | 13 + .../CD_tol-tssb/dashboard/dashboard.yaml | 59 ++ .../CD_tol-tssb/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_tol-tssb/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_tol-tssb/management-zone/README.md | 76 +++ .../CD_tol-tssb/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_tol-tssb/notification/README.md | 60 ++ .../CD_tol-tssb/notification/email.json | 13 + .../CD_tol-tssb/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../CD_tol-tssb/synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_tol/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_tol/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_tol/dashboard/README.md | 13 + .../CD_tol/dashboard/dashboard.yaml | 59 ++ .../CD_tol/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_tol/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_tol/management-zone/README.md | 76 +++ .../CD_tol/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_tol/notification/README.md | 60 ++ .../CD_tol/notification/email.json | 13 + .../CD_tol/notification/msTeams.json | 11 + .../CD_tol/notification/notification.yaml | 51 ++ .../CD_tol/synthetic-monitor/README.md | 37 ++ .../CD_tol/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_trip-route-service/dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_trip-service/dashboard/README.md | 13 + .../CD_trip-service/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../CD_trip-service/management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_trip-service/notification/README.md | 60 ++ .../CD_trip-service/notification/email.json | 13 + .../CD_trip-service/notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_ts-bcallservice/dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_ts-bcallservice/notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_ts-bt/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_ts-bt/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_ts-bt/dashboard/README.md | 13 + .../CD_ts-bt/dashboard/dashboard.yaml | 59 ++ .../CD_ts-bt/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_ts-bt/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_ts-bt/management-zone/README.md | 76 +++ .../CD_ts-bt/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_ts-bt/notification/README.md | 60 ++ .../CD_ts-bt/notification/email.json | 13 + .../CD_ts-bt/notification/msTeams.json | 11 + .../CD_ts-bt/notification/notification.yaml | 51 ++ .../CD_ts-bt/synthetic-monitor/README.md | 37 ++ .../CD_ts-bt/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_ts-bti/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_ts-bti/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_ts-bti/dashboard/README.md | 13 + .../CD_ts-bti/dashboard/dashboard.yaml | 59 ++ .../CD_ts-bti/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_ts-bti/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_ts-bti/management-zone/README.md | 76 +++ .../CD_ts-bti/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_ts-bti/notification/README.md | 60 ++ .../CD_ts-bti/notification/email.json | 13 + .../CD_ts-bti/notification/msTeams.json | 11 + .../CD_ts-bti/notification/notification.yaml | 51 ++ .../CD_ts-bti/synthetic-monitor/README.md | 37 ++ .../CD_ts-bti/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_ts-cas-spm/dashboard/README.md | 13 + .../CD_ts-cas-spm/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_ts-cas-spm/management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_ts-cas-spm/notification/README.md | 60 ++ .../CD_ts-cas-spm/notification/email.json | 13 + .../CD_ts-cas-spm/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../CD_ts-cas-spm/synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_ts-cas-stm/dashboard/README.md | 13 + .../CD_ts-cas-stm/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_ts-cas-stm/management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_ts-cas-stm/notification/README.md | 60 ++ .../CD_ts-cas-stm/notification/email.json | 13 + .../CD_ts-cas-stm/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../CD_ts-cas-stm/synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_ts-datadispatcher/dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_ts-diagservice/dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_ts-diagservice/notification/README.md | 60 ++ .../CD_ts-diagservice/notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_ts-eshad/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_ts-eshad/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_ts-eshad/dashboard/README.md | 13 + .../CD_ts-eshad/dashboard/dashboard.yaml | 59 ++ .../CD_ts-eshad/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_ts-eshad/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_ts-eshad/management-zone/README.md | 76 +++ .../CD_ts-eshad/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_ts-eshad/notification/README.md | 60 ++ .../CD_ts-eshad/notification/email.json | 13 + .../CD_ts-eshad/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../CD_ts-eshad/synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_ts-pdmupdater/dashboard/README.md | 13 + .../CD_ts-pdmupdater/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_ts-pdmupdater/notification/README.md | 60 ++ .../CD_ts-pdmupdater/notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_ts-pservice/dashboard/README.md | 13 + .../CD_ts-pservice/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_ts-pservice/management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_ts-pservice/notification/README.md | 60 ++ .../CD_ts-pservice/notification/email.json | 13 + .../CD_ts-pservice/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_ts-remotediagnosis/dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_ts-rsurservice/dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_ts-rsurservice/notification/README.md | 60 ++ .../CD_ts-rsurservice/notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_ts-rtcadapter/dashboard/README.md | 13 + .../CD_ts-rtcadapter/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_ts-rtcadapter/notification/README.md | 60 ++ .../CD_ts-rtcadapter/notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_ts-rtchandler/dashboard/README.md | 13 + .../CD_ts-rtchandler/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_ts-rtchandler/notification/README.md | 60 ++ .../CD_ts-rtchandler/notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_ts-rtcservice/dashboard/README.md | 13 + .../CD_ts-rtcservice/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_ts-rtcservice/notification/README.md | 60 ++ .../CD_ts-rtcservice/notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_ts-scallservice/dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_ts-scallservice/notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_ts-tsbgam/dashboard/README.md | 13 + .../CD_ts-tsbgam/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_ts-tsbgam/management-zone/README.md | 76 +++ .../CD_ts-tsbgam/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_ts-tsbgam/notification/README.md | 60 ++ .../CD_ts-tsbgam/notification/email.json | 13 + .../CD_ts-tsbgam/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../CD_ts-tsbgam/synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_ts-tsbgservice/dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_ts-tsbgservice/notification/README.md | 60 ++ .../CD_ts-tsbgservice/notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_ts-tsp/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_ts-tsp/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_ts-tsp/dashboard/README.md | 13 + .../CD_ts-tsp/dashboard/dashboard.yaml | 59 ++ .../CD_ts-tsp/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_ts-tsp/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_ts-tsp/management-zone/README.md | 76 +++ .../CD_ts-tsp/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_ts-tsp/notification/README.md | 60 ++ .../CD_ts-tsp/notification/email.json | 13 + .../CD_ts-tsp/notification/msTeams.json | 11 + .../CD_ts-tsp/notification/notification.yaml | 51 ++ .../CD_ts-tsp/synthetic-monitor/README.md | 37 ++ .../CD_ts-tsp/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_ts-wlupdater/dashboard/README.md | 13 + .../CD_ts-wlupdater/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_ts-wlupdater/management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_ts-wlupdater/notification/README.md | 60 ++ .../CD_ts-wlupdater/notification/email.json | 13 + .../CD_ts-wlupdater/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_tscs/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_tscs/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_tscs/dashboard/README.md | 13 + .../CD_tscs/dashboard/dashboard.yaml | 59 ++ .../CD_tscs/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_tscs/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_tscs/management-zone/README.md | 76 +++ .../CD_tscs/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_tscs/notification/README.md | 60 ++ .../CD_tscs/notification/email.json | 13 + .../CD_tscs/notification/msTeams.json | 11 + .../CD_tscs/notification/notification.yaml | 51 ++ .../CD_tscs/synthetic-monitor/README.md | 37 ++ .../CD_tscs/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_tsmb/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_tsmb/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_tsmb/dashboard/README.md | 13 + .../CD_tsmb/dashboard/dashboard.yaml | 59 ++ .../CD_tsmb/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_tsmb/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_tsmb/management-zone/README.md | 76 +++ .../CD_tsmb/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_tsmb/notification/README.md | 60 ++ .../CD_tsmb/notification/email.json | 13 + .../CD_tsmb/notification/msTeams.json | 11 + .../CD_tsmb/notification/notification.yaml | 51 ++ .../CD_tsmb/synthetic-monitor/README.md | 37 ++ .../CD_tsmb/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_tsr-cmr/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_tsr-cmr/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_tsr-cmr/dashboard/README.md | 13 + .../CD_tsr-cmr/dashboard/dashboard.yaml | 59 ++ .../CD_tsr-cmr/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_tsr-cmr/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_tsr-cmr/management-zone/README.md | 76 +++ .../CD_tsr-cmr/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_tsr-cmr/notification/README.md | 60 ++ .../CD_tsr-cmr/notification/email.json | 13 + .../CD_tsr-cmr/notification/msTeams.json | 11 + .../CD_tsr-cmr/notification/notification.yaml | 51 ++ .../CD_tsr-cmr/synthetic-monitor/README.md | 37 ++ .../CD_tsr-cmr/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_tsr-dd/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_tsr-dd/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_tsr-dd/dashboard/README.md | 13 + .../CD_tsr-dd/dashboard/dashboard.yaml | 59 ++ .../CD_tsr-dd/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_tsr-dd/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_tsr-dd/management-zone/README.md | 76 +++ .../CD_tsr-dd/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_tsr-dd/notification/README.md | 60 ++ .../CD_tsr-dd/notification/email.json | 13 + .../CD_tsr-dd/notification/msTeams.json | 11 + .../CD_tsr-dd/notification/notification.yaml | 51 ++ .../CD_tsr-dd/synthetic-monitor/README.md | 37 ++ .../CD_tsr-dd/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_tsr-vu/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_tsr-vu/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_tsr-vu/dashboard/README.md | 13 + .../CD_tsr-vu/dashboard/dashboard.yaml | 59 ++ .../CD_tsr-vu/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_tsr-vu/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_tsr-vu/management-zone/README.md | 76 +++ .../CD_tsr-vu/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_tsr-vu/notification/README.md | 60 ++ .../CD_tsr-vu/notification/email.json | 13 + .../CD_tsr-vu/notification/msTeams.json | 11 + .../CD_tsr-vu/notification/notification.yaml | 51 ++ .../CD_tsr-vu/synthetic-monitor/README.md | 37 ++ .../CD_tsr-vu/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_tsrservice/dashboard/README.md | 13 + .../CD_tsrservice/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_tsrservice/management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_tsrservice/notification/README.md | 60 ++ .../CD_tsrservice/notification/email.json | 13 + .../CD_tsrservice/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../CD_tsrservice/synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 90 ++- .../alerting-profile/default.json | 103 +++ .../user-composite-service.json | 92 --- .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../CDuser-composite-service.json | 91 --- .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 24 +- .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 90 ++- .../alerting-profile/default.json | 103 +++ .../user-profile-service.json | 92 --- .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../CDuser-profile-service.json | 91 --- .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 24 +- .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 90 ++- .../alerting-profile/default.json | 103 +++ .../vehicle-composite-service.json | 92 --- .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../CDvehicle-composite-service.json | 91 --- .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 24 +- .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 90 ++- .../alerting-profile/default.json | 103 +++ .../vehicle-features-service.json | 92 --- .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../CDvehicle-features-service.json | 91 --- .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 24 +- .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 90 ++- .../alerting-profile/default.json | 103 +++ .../vehicle-mapping-composite-service.json | 92 --- .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../CDvehicle-mapping-composite-service.json | 91 --- .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 24 +- .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 90 ++- .../alerting-profile/default.json | 103 +++ ...cle-remote-commands-composite-service.json | 92 --- .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ ...cle-remote-commands-composite-service.json | 91 --- .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 24 +- .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 90 ++- .../alerting-profile/default.json | 103 +++ .../alerting-profile/vehicle-service.json | 92 --- .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_vehicle-service/dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/CDvehicle-service.json | 91 --- .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 24 +- .../CD_vehicle-service/notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 90 ++- .../alerting-profile/default.json | 103 +++ .../vehicle-shadow-event-processor.json | 92 --- .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../CDvehicle-shadow-event-processor.json | 91 --- .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 24 +- .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 90 ++- .../alerting-profile/default.json | 103 +++ .../vehicle-status-proxy-service.json | 92 --- .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../CDvehicle-status-proxy-service.json | 91 --- .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 24 +- .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 90 ++- .../alerting-profile/default.json | 103 +++ .../vehicle-user-relationship-service.json | 92 --- .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../CDvehicle-user-relationship-service.json | 91 --- .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 24 +- .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 88 +++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 300 +++++++++ .../management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../notification/README.md | 60 ++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 76 +++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_vps-admin/dashboard/README.md | 13 + .../CD_vps-admin/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_vps-admin/management-zone/README.md | 76 +++ .../CD_vps-admin/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_vps-admin/notification/README.md | 60 ++ .../CD_vps-admin/notification/email.json | 13 + .../CD_vps-admin/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../CD_vps-admin/synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_vps-archive/dashboard/README.md | 13 + .../CD_vps-archive/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_vps-archive/management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_vps-archive/notification/README.md | 60 ++ .../CD_vps-archive/notification/email.json | 13 + .../CD_vps-archive/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_vps-monitor/dashboard/README.md | 13 + .../CD_vps-monitor/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_vps-monitor/management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_vps-monitor/notification/README.md | 60 ++ .../CD_vps-monitor/notification/email.json | 13 + .../CD_vps-monitor/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_vps-prov/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_vps-prov/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_vps-prov/dashboard/README.md | 13 + .../CD_vps-prov/dashboard/dashboard.yaml | 59 ++ .../CD_vps-prov/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_vps-prov/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_vps-prov/management-zone/README.md | 76 +++ .../CD_vps-prov/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_vps-prov/notification/README.md | 60 ++ .../CD_vps-prov/notification/email.json | 13 + .../CD_vps-prov/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../CD_vps-prov/synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_vps-trigger/dashboard/README.md | 13 + .../CD_vps-trigger/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_vps-trigger/management-zone/README.md | 76 +++ .../management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_vps-trigger/notification/README.md | 60 ++ .../CD_vps-trigger/notification/email.json | 13 + .../CD_vps-trigger/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_vs-api/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_vs-api/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_vs-api/dashboard/README.md | 13 + .../CD_vs-api/dashboard/dashboard.yaml | 59 ++ .../CD_vs-api/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_vs-api/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_vs-api/management-zone/README.md | 76 +++ .../CD_vs-api/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_vs-api/notification/README.md | 60 ++ .../CD_vs-api/notification/email.json | 13 + .../CD_vs-api/notification/msTeams.json | 11 + .../CD_vs-api/notification/notification.yaml | 51 ++ .../CD_vs-api/synthetic-monitor/README.md | 37 ++ .../CD_vs-api/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_webapi/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_webapi/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_webapi/dashboard/README.md | 13 + .../CD_webapi/dashboard/dashboard.yaml | 59 ++ .../CD_webapi/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_webapi/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_webapi/management-zone/README.md | 76 +++ .../CD_webapi/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_webapi/notification/README.md | 60 ++ .../CD_webapi/notification/email.json | 13 + .../CD_webapi/notification/msTeams.json | 11 + .../CD_webapi/notification/notification.yaml | 51 ++ .../CD_webapi/synthetic-monitor/README.md | 37 ++ .../CD_webapi/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_wlmanager/dashboard/README.md | 13 + .../CD_wlmanager/dashboard/dashboard.yaml | 59 ++ .../dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_wlmanager/management-zone/README.md | 76 +++ .../CD_wlmanager/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_wlmanager/notification/README.md | 60 ++ .../CD_wlmanager/notification/email.json | 13 + .../CD_wlmanager/notification/msTeams.json | 11 + .../notification/notification.yaml | 51 ++ .../CD_wlmanager/synthetic-monitor/README.md | 37 ++ .../synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 60 ++ .../CD_xfcd/alerting-profile/default.json | 103 +++ .../calculated-metrics-service/README.md | 10 + .../CD_xfcd/custom-service-java/README.md | 30 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 + .../CD_xfcd/dashboard/README.md | 13 + .../CD_xfcd/dashboard/dashboard.yaml | 59 ++ .../CD_xfcd/dashboard/defaultINTTEST.json | 586 ++++++++++++++++++ .../CD_xfcd/dashboard/defaultPRODE2E.json | 586 ++++++++++++++++++ .../CD_xfcd/management-zone/README.md | 76 +++ .../CD_xfcd/management-zone/default.json | 76 +++ .../management-zone/management-zone.yaml | 6 + .../CD_xfcd/notification/README.md | 60 ++ .../CD_xfcd/notification/email.json | 13 + .../CD_xfcd/notification/msTeams.json | 11 + .../CD_xfcd/notification/notification.yaml | 51 ++ .../CD_xfcd/synthetic-monitor/README.md | 37 ++ .../CD_xfcd/synthetic-monitor/default.json | 82 +++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + 4722 files changed, 417877 insertions(+), 4173 deletions(-) rename BMW-Dynatrace-config/CD_agent-service/alerting-profile/{agent-service.json => default.json} (66%) create mode 100644 BMW-Dynatrace-config/CD_agent-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_agent-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_agent-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_agent-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_agent-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_agent-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_agent-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_agent-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_agent-service/management-zone/README.md rename BMW-Dynatrace-config/{CD_client-vehicle-telemetry-processor/management-zone/CDclient-vehicle-telemetry-processor.json => CD_agent-service/management-zone/default.json} (60%) create mode 100644 BMW-Dynatrace-config/CD_agent-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_agent-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_agent-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_agent-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_agent-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_agent-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_agent-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_aluis/alerting-profile/alerting-profile.yaml rename BMW-Dynatrace-config/{CD_client-vehicle-telemetry-processor/alerting-profile/client-vehicle-telemetry-processor.json => CD_aluis/alerting-profile/default.json} (66%) create mode 100644 BMW-Dynatrace-config/CD_aluis/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_aluis/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_aluis/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_aluis/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_aluis/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_aluis/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_aluis/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_aluis/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_aluis/management-zone/README.md rename BMW-Dynatrace-config/{CD_agent-service/management-zone/CDagent-service.json => CD_aluis/management-zone/default.json} (60%) create mode 100644 BMW-Dynatrace-config/CD_aluis/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_aluis/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_aluis/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_aluis/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_aluis/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_aluis/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_aluis/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_aluis/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_am-casa/alerting-profile/alerting-profile.yaml rename BMW-Dynatrace-config/{CD_chargenow-enabler-service/alerting-profile/chargenow-enabler-service.json => CD_am-casa/alerting-profile/default.json} (66%) create mode 100644 BMW-Dynatrace-config/CD_am-casa/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_am-casa/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_am-casa/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_am-casa/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_am-casa/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_am-casa/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_am-casa/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_am-casa/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_am-casa/management-zone/README.md rename BMW-Dynatrace-config/{CD_destination-composite-service/management-zone/CDdestination-composite-service.json => CD_am-casa/management-zone/default.json} (60%) create mode 100644 BMW-Dynatrace-config/CD_am-casa/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_am-casa/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_am-casa/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_am-casa/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_am-casa/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_am-casa/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_am-casa/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_am-casa/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_am-cesim/alerting-profile/alerting-profile.yaml rename BMW-Dynatrace-config/{CD_destination-composite-service/alerting-profile/destination-composite-service.json => CD_am-cesim/alerting-profile/default.json} (66%) create mode 100644 BMW-Dynatrace-config/CD_am-cesim/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_am-cesim/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_am-cesim/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_am-cesim/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_am-cesim/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_am-cesim/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_am-cesim/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_am-cesim/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_am-cesim/management-zone/README.md rename BMW-Dynatrace-config/{CD_chargenow-enabler-service/management-zone/CDchargenow-enabler-service.json => CD_am-cesim/management-zone/default.json} (60%) create mode 100644 BMW-Dynatrace-config/CD_am-cesim/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_am-cesim/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_am-cesim/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_am-cesim/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_am-cesim/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_am-cesim/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_am-cesim/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_am-cesim/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_am-cns/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_am-cns/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_am-cns/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_am-cns/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_am-cns/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_am-cns/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_am-cns/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_am-cns/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_am-cns/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_am-cns/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_am-cns/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_am-cns/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_am-cns/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_am-cns/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_am-cns/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_am-cns/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_am-cns/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_am-cns/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_am-cns/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_am-cns/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_am-device/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_am-device/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_am-device/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_am-device/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_am-device/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_am-device/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_am-device/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_am-device/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_am-device/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_am-device/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_am-device/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_am-device/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_am-device/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_am-device/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_am-device/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_am-device/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_am-device/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_am-device/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_am-device/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_am-device/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_am-ecs/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_am-ecs/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_am-ecs/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_am-ecs/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_am-ecs/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_am-ecs/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_am-ecs/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_am-ecs/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_am-ecs/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_am-ecs/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_am-ecs/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_am-ecs/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_am-ecs/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_am-ecs/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_am-ecs/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_am-ecs/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_am-ecs/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_am-ecs/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_am-ecs/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_am-ecs/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_am-egim/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_am-egim/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_am-egim/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_am-egim/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_am-egim/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_am-egim/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_am-egim/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_am-egim/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_am-egim/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_am-egim/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_am-egim/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_am-egim/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_am-egim/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_am-egim/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_am-egim/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_am-egim/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_am-egim/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_am-egim/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_am-egim/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_am-egim/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_am-esim-ui/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_am-esim-ui/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_am-esim-ui/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_am-esim-ui/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_am-esim-ui/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_am-esim-ui/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_am-esim-ui/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_am-esim-ui/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_am-esim-ui/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_am-esim-ui/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_am-esim-ui/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_am-esim-ui/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_am-esim-ui/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_am-esim-ui/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_am-esim-ui/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_am-esim-ui/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_am-esim-ui/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_am-esim-ui/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_am-esim-ui/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_am-esim-ui/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_am-lmcs/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_am-lmcs/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_am-lmcs/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_am-lmcs/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_am-lmcs/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_am-lmcs/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_am-lmcs/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_am-lmcs/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_am-lmcs/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_am-lmcs/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_am-lmcs/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_am-lmcs/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_am-lmcs/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_am-lmcs/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_am-lmcs/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_am-lmcs/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_am-lmcs/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_am-lmcs/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_am-lmcs/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_am-lmcs/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_am-mno-manager/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_am-mno-manager/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_am-mno-manager/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_am-mno-manager/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_am-mno-manager/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_am-mno-manager/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_am-mno-manager/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_am-mno-manager/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_am-mno-manager/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_am-mno-manager/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_am-mno-manager/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_am-mno-manager/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_am-mno-manager/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_am-mno-manager/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_am-mno-manager/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_am-mno-manager/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_am-mno-manager/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_am-mno-manager/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_am-mno-manager/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_am-mno-manager/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_am-proxy/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_am-proxy/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_am-proxy/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_am-proxy/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_am-proxy/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_am-proxy/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_am-proxy/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_am-proxy/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_am-proxy/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_am-proxy/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_am-proxy/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_am-proxy/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_am-proxy/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_am-proxy/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_am-proxy/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_am-proxy/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_am-proxy/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_am-proxy/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_am-proxy/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_am-proxy/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_am-store/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_am-store/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_am-store/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_am-store/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_am-store/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_am-store/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_am-store/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_am-store/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_am-store/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_am-store/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_am-store/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_am-store/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_am-store/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_am-store/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_am-store/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_am-store/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_am-store/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_am-store/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_am-store/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_am-store/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_am-svms/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_am-svms/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_am-svms/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_am-svms/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_am-svms/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_am-svms/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_am-svms/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_am-svms/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_am-svms/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_am-svms/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_am-svms/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_am-svms/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_am-svms/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_am-svms/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_am-svms/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_am-svms/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_am-svms/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_am-svms/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_am-svms/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_am-svms/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_am-ui/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_am-ui/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_am-ui/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_am-ui/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_am-ui/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_am-ui/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_am-ui/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_am-ui/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_am-ui/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_am-ui/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_am-ui/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_am-ui/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_am-ui/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_am-ui/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_am-ui/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_am-ui/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_am-ui/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_am-ui/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_am-ui/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_am-ui/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_am-usage/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_am-usage/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_am-usage/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_am-usage/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_am-usage/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_am-usage/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_am-usage/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_am-usage/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_am-usage/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_am-usage/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_am-usage/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_am-usage/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_am-usage/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_am-usage/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_am-usage/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_am-usage/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_am-usage/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_am-usage/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_am-usage/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_am-usage/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_am-vehicle-activation/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_am-vehicle-activation/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_am-vehicle-activation/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_am-vehicle-activation/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_am-vehicle-activation/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_am-vehicle-activation/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_am-vehicle-activation/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_am-vehicle-activation/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_am-vehicle-activation/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_am-vehicle-activation/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_am-vehicle-activation/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_am-vehicle-activation/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_am-vehicle-activation/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_am-vehicle-activation/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_am-vehicle-activation/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_am-vehicle-activation/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_am-vehicle-activation/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_am-vehicle-activation/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_am-vehicle-activation/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_am-vehicle-activation/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_am-vms/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_am-vms/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_am-vms/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_am-vms/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_am-vms/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_am-vms/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_am-vms/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_am-vms/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_am-vms/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_am-vms/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_am-vms/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_am-vms/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_am-vms/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_am-vms/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_am-vms/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_am-vms/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_am-vms/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_am-vms/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_am-vms/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_am-vms/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_analytics-user-data-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_analytics-user-data-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_analytics-user-data-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_analytics-user-data-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_analytics-user-data-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_analytics-user-data-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_analytics-user-data-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_analytics-user-data-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_analytics-user-data-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_analytics-user-data-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_analytics-user-data-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_analytics-user-data-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_analytics-user-data-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_analytics-user-data-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_analytics-user-data-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_analytics-user-data-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_analytics-user-data-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_analytics-user-data-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_analytics-user-data-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_analytics-user-data-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_asbc-sfa-oh/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_asbc-sfa-oh/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_asbc-sfa-oh/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_asbc-sfa-oh/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_asbc-sfa-oh/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_asbc-sfa-oh/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_asbc-sfa-oh/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_asbc-sfa-oh/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_asbc-sfa-oh/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_asbc-sfa-oh/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_asbc-sfa-oh/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_asbc-sfa-oh/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_asbc-sfa-oh/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_asbc-sfa-oh/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_asbc-sfa-oh/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_asbc-sfa-oh/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_asbc-sfa-oh/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_asbc-sfa-oh/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_asbc-sfa-oh/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_asbc-sfa-oh/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_asbc-sts/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_asbc-sts/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_asbc-sts/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_asbc-sts/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_asbc-sts/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_asbc-sts/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_asbc-sts/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_asbc-sts/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_asbc-sts/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_asbc-sts/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_asbc-sts/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_asbc-sts/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_asbc-sts/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_asbc-sts/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_asbc-sts/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_asbc-sts/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_asbc-sts/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_asbc-sts/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_asbc-sts/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_asbc-sts/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_asbctvp/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_asbctvp/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_asbctvp/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_asbctvp/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_asbctvp/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_asbctvp/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_asbctvp/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_asbctvp/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_asbctvp/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_asbctvp/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_asbctvp/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_asbctvp/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_asbctvp/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_asbctvp/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_asbctvp/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_asbctvp/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_asbctvp/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_asbctvp/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_asbctvp/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_asbctvp/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_avs-client-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_avs-client-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_avs-client-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_avs-client-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_avs-client-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_avs-client-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_avs-client-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_avs-client-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_avs-client-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_avs-client-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_avs-client-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_avs-client-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_avs-client-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_avs-client-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_avs-client-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_avs-client-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_avs-client-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_avs-client-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_avs-client-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_avs-client-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_avs-proxy-composite-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_avs-proxy-composite-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_avs-proxy-composite-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_avs-proxy-composite-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_avs-proxy-composite-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_avs-proxy-composite-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_avs-proxy-composite-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_avs-proxy-composite-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_avs-proxy-composite-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_avs-proxy-composite-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_avs-proxy-composite-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_avs-proxy-composite-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_avs-proxy-composite-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_avs-proxy-composite-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_avs-proxy-composite-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_avs-proxy-composite-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_avs-proxy-composite-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_avs-proxy-composite-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_avs-proxy-composite-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_avs-proxy-composite-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-be/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-be/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-be/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-be/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-be/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-be/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-be/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-be/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-be/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-be/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-be/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-be/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-be/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-be/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-be/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-be/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-be/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-be/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-be/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-be/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-echo/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-echo/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-echo/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-echo/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-echo/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-echo/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-echo/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-echo/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-echo/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-echo/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-echo/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-echo/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-echo/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-echo/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-echo/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-echo/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-echo/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-echo/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-echo/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-echo/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-fe/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-fe/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-fe/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-fe/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-fe/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-fe/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-fe/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-fe/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-fe/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-fe/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-fe/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-fe/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-fe/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-fe/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-fe/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-fe/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-fe/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-fe/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-fe/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-fe/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-gcdm-client/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-gcdm-client/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-gcdm-client/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-gcdm-client/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-gcdm-client/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-gcdm-client/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-gcdm-client/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-gcdm-client/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-gcdm-client/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-gcdm-client/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-gcdm-client/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-gcdm-client/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-gcdm-client/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-gcdm-client/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-gcdm-client/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-gcdm-client/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-gcdm-client/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-gcdm-client/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-gcdm-client/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-gcdm-client/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-hello/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-hello/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-hello/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-hello/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-hello/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-hello/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-hello/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-hello/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-hello/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-hello/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-hello/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-hello/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-hello/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-hello/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-hello/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-hello/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-hello/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-hello/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-hello/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-hello/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-nots/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-nots/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_b2v-nots/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-nots/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-nots/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-nots/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_b2v-nots/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-nots/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-nots/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_b2v-nots/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_b2v-nots/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-nots/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_b2v-nots/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-nots/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-nots/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_b2v-nots/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_b2v-nots/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-nots/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-nots/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_b2v-nots/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-sms-statistics/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-sms-statistics/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_b2v-sms-statistics/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-sms-statistics/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-sms-statistics/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-sms-statistics/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_b2v-sms-statistics/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-sms-statistics/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-sms-statistics/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_b2v-sms-statistics/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_b2v-sms-statistics/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-sms-statistics/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_b2v-sms-statistics/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-sms-statistics/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-sms-statistics/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_b2v-sms-statistics/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_b2v-sms-statistics/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-sms-statistics/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-sms-statistics/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_b2v-sms-statistics/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_bsi-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_bsi-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_bsi-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_bsi-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_bsi-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_bsi-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_bsi-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_bsi-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_bsi-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_bsi-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_bsi-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_bsi-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_bsi-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_bsi-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_bsi-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_bsi-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_bsi-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_bsi-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_bsi-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_bsi-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_cac/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_cac/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_cac/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_cac/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_cac/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_cac/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_cac/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_cac/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_cac/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_cac/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_cac/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_cac/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_cac/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_cac/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_cac/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_cac/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_cac/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_cac/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_cac/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_cac/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_casa-event-processor/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_casa-event-processor/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_casa-event-processor/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_casa-event-processor/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_casa-event-processor/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_casa-event-processor/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_casa-event-processor/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_casa-event-processor/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_casa-event-processor/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_casa-event-processor/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_casa-event-processor/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_casa-event-processor/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_casa-event-processor/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_casa-event-processor/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_casa-event-processor/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_casa-event-processor/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_casa-event-processor/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_casa-event-processor/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_casa-event-processor/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_casa-event-processor/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_cdc/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_cdc/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_cdc/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_cdc/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_cdc/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_cdc/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_cdc/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_cdc/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_cdc/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_cdc/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_cdc/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_cdc/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_cdc/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_cdc/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_cdc/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_cdc/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_cdc/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_cdc/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_cdc/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_cdc/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_cdcicd-jenkins/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_cdcicd-jenkins/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_cdcicd-jenkins/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_cdcicd-jenkins/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_cdcicd-jenkins/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_cdcicd-jenkins/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_cdcicd-jenkins/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_cdcicd-jenkins/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_cdcicd-jenkins/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_cdcicd-jenkins/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_cdcicd-jenkins/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_cdcicd-jenkins/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_cdcicd-jenkins/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_cdcicd-jenkins/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_cdcicd-jenkins/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_cdcicd-jenkins/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_cdcicd-jenkins/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_cdcicd-jenkins/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_cdcicd-jenkins/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_cdcicd-jenkins/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_chargenow-enabler-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_chargenow-enabler-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_chargenow-enabler-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_chargenow-enabler-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_chargenow-enabler-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_chargenow-enabler-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_chargenow-enabler-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_chargenow-enabler-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_chargenow-enabler-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_chargenow-enabler-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_chargenow-enabler-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_chargenow-enabler-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_chargenow-enabler-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_chargenow-enabler-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_chargenow-enabler-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_chargenow-enabler-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_chargenow-enabler-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_chargenow-enabler-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy-composite/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy-composite/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy-composite/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy-composite/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy-composite/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy-composite/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy-composite/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy-composite/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy-composite/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy-composite/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy-composite/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy-composite/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy-composite/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy-composite/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy-composite/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy-composite/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy-composite/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy-composite/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy-composite/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy-composite/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-events-push-notification-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-events-push-notification-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_charging-events-push-notification-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-events-push-notification-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-events-push-notification-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-events-push-notification-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_charging-events-push-notification-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-events-push-notification-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-events-push-notification-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_charging-events-push-notification-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_charging-events-push-notification-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-events-push-notification-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_charging-events-push-notification-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-events-push-notification-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-events-push-notification-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_charging-events-push-notification-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_charging-events-push-notification-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-events-push-notification-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-events-push-notification-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_charging-events-push-notification-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-events-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-events-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_charging-events-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-events-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-events-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-events-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_charging-events-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-events-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-events-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_charging-events-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_charging-events-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-events-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_charging-events-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-events-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-events-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_charging-events-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_charging-events-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-events-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-events-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_charging-events-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-plan-composite-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-plan-composite-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_charging-plan-composite-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-plan-composite-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-plan-composite-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-plan-composite-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_charging-plan-composite-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-plan-composite-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-plan-composite-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_charging-plan-composite-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_charging-plan-composite-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-plan-composite-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_charging-plan-composite-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-plan-composite-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-plan-composite-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_charging-plan-composite-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_charging-plan-composite-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-plan-composite-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-plan-composite-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_charging-plan-composite-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-push-notifications-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-push-notifications-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_charging-push-notifications-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-push-notifications-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-push-notifications-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-push-notifications-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_charging-push-notifications-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-push-notifications-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-push-notifications-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_charging-push-notifications-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_charging-push-notifications-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-push-notifications-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_charging-push-notifications-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-push-notifications-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-push-notifications-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_charging-push-notifications-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_charging-push-notifications-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-push-notifications-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-push-notifications-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_charging-push-notifications-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-sessions-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-sessions-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_charging-sessions-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-sessions-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-sessions-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-sessions-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_charging-sessions-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-sessions-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-sessions-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_charging-sessions-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_charging-sessions-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-sessions-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_charging-sessions-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-sessions-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-sessions-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_charging-sessions-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_charging-sessions-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-sessions-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-sessions-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_charging-sessions-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-stations-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-stations-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_charging-stations-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-stations-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-stations-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-stations-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_charging-stations-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-stations-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-stations-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_charging-stations-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_charging-stations-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-stations-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_charging-stations-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-stations-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-stations-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_charging-stations-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_charging-stations-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-stations-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-stations-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_charging-stations-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_client-agent-telemetry-processor/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_client-agent-telemetry-processor/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_client-agent-telemetry-processor/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_client-agent-telemetry-processor/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_client-agent-telemetry-processor/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_client-agent-telemetry-processor/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_client-agent-telemetry-processor/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_client-agent-telemetry-processor/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_client-agent-telemetry-processor/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_client-agent-telemetry-processor/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_client-agent-telemetry-processor/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_client-agent-telemetry-processor/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_client-agent-telemetry-processor/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_client-agent-telemetry-processor/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_client-agent-telemetry-processor/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_client-agent-telemetry-processor/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_client-agent-telemetry-processor/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_client-agent-telemetry-processor/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_client-agent-telemetry-processor/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_client-agent-telemetry-processor/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_cm/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_cm/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_cm/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_cm/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_cm/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_cm/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_cm/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_cm/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_cm/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_cm/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_cm/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_cm/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_cm/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_cm/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_cm/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_cm/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_cm/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_cm/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_cm/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_cm/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_commute-notification-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_commute-notification-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_commute-notification-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_commute-notification-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_commute-notification-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_commute-notification-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_commute-notification-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_commute-notification-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_commute-notification-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_commute-notification-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_commute-notification-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_commute-notification-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_commute-notification-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_commute-notification-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_commute-notification-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_commute-notification-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_commute-notification-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_commute-notification-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_commute-notification-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_commute-notification-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_commute-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_commute-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_commute-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_commute-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_commute-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_commute-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_commute-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_commute-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_commute-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_commute-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_commute-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_commute-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_commute-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_commute-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_commute-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_commute-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_commute-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_commute-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_commute-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_commute-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_connected-oauth-service-apim/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_connected-oauth-service-apim/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_connected-oauth-service-apim/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_connected-oauth-service-apim/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_connected-oauth-service-apim/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_connected-oauth-service-apim/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_connected-oauth-service-apim/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_connected-oauth-service-apim/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_connected-oauth-service-apim/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_connected-oauth-service-apim/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_connected-oauth-service-apim/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_connected-oauth-service-apim/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_connected-oauth-service-apim/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_connected-oauth-service-apim/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_connected-oauth-service-apim/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_connected-oauth-service-apim/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_connected-oauth-service-apim/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_connected-oauth-service-apim/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_connected-oauth-service-apim/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_connected-oauth-service-apim/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_connected-onboard-composite-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_connected-onboard-composite-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_connected-onboard-composite-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_connected-onboard-composite-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_connected-onboard-composite-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_connected-onboard-composite-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_connected-onboard-composite-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_connected-onboard-composite-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_connected-onboard-composite-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_connected-onboard-composite-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_connected-onboard-composite-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_connected-onboard-composite-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_connected-onboard-composite-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_connected-onboard-composite-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_connected-onboard-composite-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_connected-onboard-composite-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_connected-onboard-composite-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_connected-onboard-composite-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_connected-onboard-composite-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_connected-onboard-composite-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_csu/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_csu/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_csu/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_csu/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_csu/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_csu/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_csu/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_csu/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_csu/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_csu/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_csu/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_csu/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_csu/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_csu/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_csu/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_csu/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_csu/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_csu/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_csu/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_csu/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_ctns-event-origin/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_ctns-event-origin/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_ctns-event-origin/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ctns-event-origin/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_ctns-event-origin/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_ctns-event-origin/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_ctns-event-origin/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_ctns-event-origin/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_ctns-event-origin/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_ctns-event-origin/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_ctns-event-origin/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_ctns-event-origin/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_ctns-event-origin/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_ctns-event-origin/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_ctns-event-origin/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_ctns-event-origin/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_ctns-event-origin/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_ctns-event-origin/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_ctns-event-origin/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_ctns-event-origin/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_ctns-marketing-api/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_ctns-marketing-api/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_ctns-marketing-api/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ctns-marketing-api/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_ctns-marketing-api/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_ctns-marketing-api/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_ctns-marketing-api/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_ctns-marketing-api/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_ctns-marketing-api/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_ctns-marketing-api/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_ctns-marketing-api/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_ctns-marketing-api/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_ctns-marketing-api/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_ctns-marketing-api/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_ctns-marketing-api/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_ctns-marketing-api/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_ctns-marketing-api/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_ctns-marketing-api/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_ctns-marketing-api/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_ctns-marketing-api/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_ctns-vehicle-api/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_ctns-vehicle-api/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_ctns-vehicle-api/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ctns-vehicle-api/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_ctns-vehicle-api/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_ctns-vehicle-api/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_ctns-vehicle-api/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_ctns-vehicle-api/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_ctns-vehicle-api/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_ctns-vehicle-api/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_ctns-vehicle-api/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_ctns-vehicle-api/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_ctns-vehicle-api/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_ctns-vehicle-api/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_ctns-vehicle-api/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_ctns-vehicle-api/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_ctns-vehicle-api/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_ctns-vehicle-api/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_ctns-vehicle-api/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_ctns-vehicle-api/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_current-driver-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_current-driver-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_current-driver-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_current-driver-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_current-driver-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_current-driver-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_current-driver-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_current-driver-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_current-driver-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_current-driver-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_current-driver-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_current-driver-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_current-driver-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_current-driver-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_current-driver-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_current-driver-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_current-driver-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_current-driver-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_current-driver-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_current-driver-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_data-deletion-processor/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_data-deletion-processor/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_data-deletion-processor/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_data-deletion-processor/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_data-deletion-processor/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_data-deletion-processor/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_data-deletion-processor/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_data-deletion-processor/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_data-deletion-processor/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_data-deletion-processor/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_data-deletion-processor/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_data-deletion-processor/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_data-deletion-processor/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_data-deletion-processor/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_data-deletion-processor/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_data-deletion-processor/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_data-deletion-processor/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_data-deletion-processor/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_data-deletion-processor/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_data-deletion-processor/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-comms-provider-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-comms-provider-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_dealer-comms-provider-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-comms-provider-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-comms-provider-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-comms-provider-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_dealer-comms-provider-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-comms-provider-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-comms-provider-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_dealer-comms-provider-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_dealer-comms-provider-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-comms-provider-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_dealer-comms-provider-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-comms-provider-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-comms-provider-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_dealer-comms-provider-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_dealer-comms-provider-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-comms-provider-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-comms-provider-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_dealer-comms-provider-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-data-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-data-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_dealer-data-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-data-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-data-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-data-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_dealer-data-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-data-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-data-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_dealer-data-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_dealer-data-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-data-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_dealer-data-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-data-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-data-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_dealer-data-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_dealer-data-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-data-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-data-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_dealer-data-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-invoice-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-invoice-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-invoice-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-invoice-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-invoice-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-invoice-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-invoice-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-invoice-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-invoice-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-invoice-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-invoice-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-invoice-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-invoice-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-invoice-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-invoice-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-invoice-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-invoice-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-invoice-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-invoice-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-invoice-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-notification-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-notification-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-notification-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-notification-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-notification-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-notification-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-notification-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-notification-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-notification-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-notification-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-notification-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-notification-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-notification-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-notification-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-notification-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-notification-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-notification-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-notification-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-notification-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-notification-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-search-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-search-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_dealer-search-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-search-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-search-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-search-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_dealer-search-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-search-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-search-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_dealer-search-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_dealer-search-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-search-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_dealer-search-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-search-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-search-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_dealer-search-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_dealer-search-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-search-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-search-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_dealer-search-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-services-composite-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-services-composite-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_dealer-services-composite-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-services-composite-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-services-composite-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-services-composite-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_dealer-services-composite-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-services-composite-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-services-composite-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_dealer-services-composite-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_dealer-services-composite-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-services-composite-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_dealer-services-composite-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-services-composite-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-services-composite-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_dealer-services-composite-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_dealer-services-composite-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-services-composite-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-services-composite-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_dealer-services-composite-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_dealercockpit/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_dealercockpit/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_dealercockpit/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_dealercockpit/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_dealercockpit/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_dealercockpit/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_dealercockpit/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_dealercockpit/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_dealercockpit/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_dealercockpit/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_dealercockpit/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_dealercockpit/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_dealercockpit/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_dealercockpit/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_dealercockpit/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_dealercockpit/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_dealercockpit/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_dealercockpit/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_dealercockpit/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_dealercockpit/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_delivery/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_delivery/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_delivery/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_delivery/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_delivery/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_delivery/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_delivery/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_delivery/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_delivery/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_delivery/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_delivery/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_delivery/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_delivery/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_delivery/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_delivery/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_delivery/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_delivery/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_delivery/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_delivery/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_delivery/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_destination-composite-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_destination-composite-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_destination-composite-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_destination-composite-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_destination-composite-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_destination-composite-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_destination-composite-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_destination-composite-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_destination-composite-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_destination-composite-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_destination-composite-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_destination-composite-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_destination-composite-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_destination-composite-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_destination-composite-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_destination-composite-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_destination-composite-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_destination-composite-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_digital-key-composite-service/alerting-profile/default.json delete mode 100644 BMW-Dynatrace-config/CD_digital-key-composite-service/alerting-profile/digital-key-composite-service.json create mode 100644 BMW-Dynatrace-config/CD_digital-key-composite-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_digital-key-composite-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_digital-key-composite-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_digital-key-composite-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_digital-key-composite-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_digital-key-composite-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_digital-key-composite-service/dashboard/defaultPRODE2E.json delete mode 100644 BMW-Dynatrace-config/CD_digital-key-composite-service/dashboard/digital-key-composite-service.json delete mode 100644 BMW-Dynatrace-config/CD_digital-key-composite-service/management-zone/CDdigital-key-composite-service.json create mode 100644 BMW-Dynatrace-config/CD_digital-key-composite-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_digital-key-composite-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_digital-key-composite-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_digital-key-composite-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_digital-key-composite-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_digital-key-composite-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_digital-key-composite-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_digital-key-composite-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_digital-key-composite-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_discover-bmw-composite-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_discover-bmw-composite-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_discover-bmw-composite-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_discover-bmw-composite-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_discover-bmw-composite-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_discover-bmw-composite-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_discover-bmw-composite-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_discover-bmw-composite-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_discover-bmw-composite-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_discover-bmw-composite-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_discover-bmw-composite-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_discover-bmw-composite-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_discover-bmw-composite-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_discover-bmw-composite-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_discover-bmw-composite-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_discover-bmw-composite-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_discover-bmw-composite-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_discover-bmw-composite-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_discover-bmw-composite-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_discover-bmw-composite-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_dsd/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_dsd/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_dsd/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_dsd/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_dsd/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_dsd/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_dsd/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_dsd/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_dsd/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_dsd/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_dsd/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_dsd/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_dsd/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_dsd/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_dsd/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_dsd/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_dsd/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_dsd/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_dsd/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_dsd/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_eadb/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_eadb/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_eadb/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_eadb/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_eadb/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_eadb/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_eadb/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_eadb/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_eadb/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_eadb/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_eadb/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_eadb/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_eadb/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_eadb/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_eadb/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_eadb/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_eadb/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_eadb/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_eadb/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_eadb/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_ercaf/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_ercaf/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_ercaf/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ercaf/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_ercaf/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_ercaf/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_ercaf/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_ercaf/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_ercaf/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_ercaf/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_ercaf/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_ercaf/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_ercaf/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_ercaf/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_ercaf/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_ercaf/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_ercaf/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_ercaf/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_ercaf/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_ercaf/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_ercr/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_ercr/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_ercr/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ercr/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_ercr/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_ercr/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_ercr/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_ercr/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_ercr/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_ercr/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_ercr/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_ercr/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_ercr/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_ercr/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_ercr/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_ercr/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_ercr/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_ercr/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_ercr/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_ercr/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_erd/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_erd/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_erd/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_erd/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_erd/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_erd/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_erd/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_erd/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_erd/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_erd/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_erd/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_erd/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_erd/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_erd/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_erd/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_erd/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_erd/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_erd/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_erd/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_erd/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_esh/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_esh/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_esh/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_esh/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_esh/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_esh/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_esh/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_esh/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_esh/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_esh/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_esh/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_esh/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_esh/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_esh/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_esh/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_esh/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_esh/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_esh/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_esh/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_esh/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_esim-composite-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_esim-composite-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_esim-composite-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_esim-composite-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_esim-composite-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_esim-composite-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_esim-composite-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_esim-composite-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_esim-composite-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_esim-composite-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_esim-composite-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_esim-composite-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_esim-composite-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_esim-composite-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_esim-composite-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_esim-composite-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_esim-composite-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_esim-composite-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_esim-composite-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_esim-composite-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_explore-composite-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_explore-composite-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_explore-composite-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_explore-composite-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_explore-composite-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_explore-composite-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_explore-composite-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_explore-composite-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_explore-composite-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_explore-composite-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_explore-composite-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_explore-composite-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_explore-composite-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_explore-composite-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_explore-composite-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_explore-composite-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_explore-composite-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_explore-composite-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_explore-composite-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_explore-composite-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_feature-toggles-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_feature-toggles-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_feature-toggles-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_feature-toggles-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_feature-toggles-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_feature-toggles-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_feature-toggles-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_feature-toggles-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_feature-toggles-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_feature-toggles-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_feature-toggles-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_feature-toggles-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_feature-toggles-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_feature-toggles-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_feature-toggles-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_feature-toggles-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_feature-toggles-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_feature-toggles-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_feature-toggles-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_feature-toggles-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_fmc/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_fmc/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_fmc/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_fmc/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_fmc/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_fmc/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_fmc/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_fmc/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_fmc/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_fmc/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_fmc/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_fmc/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_fmc/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_fmc/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_fmc/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_fmc/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_fmc/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_fmc/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_fmc/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_fmc/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_fuel-search-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_fuel-search-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_fuel-search-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_fuel-search-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_fuel-search-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_fuel-search-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_fuel-search-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_fuel-search-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_fuel-search-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_fuel-search-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_fuel-search-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_fuel-search-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_fuel-search-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_fuel-search-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_fuel-search-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_fuel-search-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_fuel-search-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_fuel-search-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_fuel-search-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_fuel-search-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_hpauth/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_hpauth/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_hpauth/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_hpauth/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_hpauth/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_hpauth/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_hpauth/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_hpauth/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_hpauth/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_hpauth/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_hpauth/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_hpauth/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_hpauth/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_hpauth/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_hpauth/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_hpauth/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_hpauth/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_hpauth/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_hpauth/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_hpauth/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_hubtab-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_hubtab-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_hubtab-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_hubtab-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_hubtab-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_hubtab-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_hubtab-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_hubtab-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_hubtab-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_hubtab-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_hubtab-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_hubtab-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_hubtab-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_hubtab-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_hubtab-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_hubtab-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_hubtab-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_hubtab-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_hubtab-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_hubtab-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_id-lookup-service/alerting-profile/default.json delete mode 100644 BMW-Dynatrace-config/CD_id-lookup-service/alerting-profile/id-lookup-service.json create mode 100644 BMW-Dynatrace-config/CD_id-lookup-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_id-lookup-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_id-lookup-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_id-lookup-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_id-lookup-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_id-lookup-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_id-lookup-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_id-lookup-service/dashboard/defaultPRODE2E.json delete mode 100644 BMW-Dynatrace-config/CD_id-lookup-service/management-zone/CDid-lookup-service.json create mode 100644 BMW-Dynatrace-config/CD_id-lookup-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_id-lookup-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_id-lookup-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_id-lookup-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_id-lookup-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_id-lookup-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_id-lookup-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_id-lookup-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_id-lookup-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_ids-admin/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_ids-admin/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_ids-admin/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ids-admin/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_ids-admin/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_ids-admin/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_ids-admin/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_ids-admin/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_ids-admin/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_ids-admin/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_ids-admin/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_ids-admin/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_ids-admin/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_ids-admin/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_ids-admin/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_ids-admin/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_ids-admin/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_ids-admin/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_ids-admin/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_ids-admin/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_ids-svds/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_ids-svds/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_ids-svds/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ids-svds/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_ids-svds/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_ids-svds/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_ids-svds/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_ids-svds/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_ids-svds/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_ids-svds/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_ids-svds/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_ids-svds/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_ids-svds/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_ids-svds/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_ids-svds/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_ids-svds/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_ids-svds/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_ids-svds/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_ids-svds/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_ids-svds/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_ids-sync/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_ids-sync/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_ids-sync/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ids-sync/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_ids-sync/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_ids-sync/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_ids-sync/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_ids-sync/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_ids-sync/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_ids-sync/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_ids-sync/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_ids-sync/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_ids-sync/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_ids-sync/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_ids-sync/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_ids-sync/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_ids-sync/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_ids-sync/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_ids-sync/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_ids-sync/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_ids-ws/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_ids-ws/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_ids-ws/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ids-ws/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_ids-ws/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_ids-ws/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_ids-ws/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_ids-ws/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_ids-ws/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_ids-ws/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_ids-ws/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_ids-ws/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_ids-ws/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_ids-ws/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_ids-ws/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_ids-ws/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_ids-ws/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_ids-ws/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_ids-ws/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_ids-ws/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_image-composite-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_image-composite-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_image-composite-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_imiles-service/alerting-profile/default.json delete mode 100644 BMW-Dynatrace-config/CD_imiles-service/alerting-profile/imiles-service.json create mode 100644 BMW-Dynatrace-config/CD_imiles-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_imiles-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_imiles-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_imiles-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_imiles-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_imiles-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_imiles-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_imiles-service/dashboard/defaultPRODE2E.json delete mode 100644 BMW-Dynatrace-config/CD_imiles-service/management-zone/CDimiles-service.json create mode 100644 BMW-Dynatrace-config/CD_imiles-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_imiles-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_imiles-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_imiles-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_imiles-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_imiles-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_imiles-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_imiles-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_imiles-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_ipa-gateway/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_ipa-gateway/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_ipa-gateway/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ipa-gateway/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_ipa-gateway/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_ipa-gateway/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_ipa-gateway/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_ipa-gateway/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_ipa-gateway/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_ipa-gateway/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_ipa-gateway/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_ipa-gateway/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_ipa-gateway/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_ipa-gateway/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_ipa-gateway/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_ipa-gateway/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_ipa-gateway/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_ipa-gateway/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_ipa-gateway/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_ipa-gateway/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_jdssp21/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_jdssp21/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_jdssp21/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_jdssp21/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_jdssp21/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_jdssp21/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_jdssp21/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_jdssp21/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_jdssp21/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_jdssp21/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_jdssp21/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_jdssp21/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_jdssp21/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_jdssp21/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_jdssp21/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_jdssp21/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_jdssp21/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_jdssp21/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_jdssp21/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_jdssp21/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_legacy-deletion-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_legacy-deletion-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_legacy-deletion-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_legacy-deletion-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_legacy-deletion-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_legacy-deletion-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_legacy-deletion-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_legacy-deletion-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_legacy-deletion-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_legacy-deletion-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_legacy-deletion-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_legacy-deletion-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_legacy-deletion-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_legacy-deletion-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_legacy-deletion-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_legacy-deletion-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_legacy-deletion-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_legacy-deletion-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_legacy-deletion-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_legacy-deletion-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_legacy-sar-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_legacy-sar-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_legacy-sar-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_legacy-sar-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_legacy-sar-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_legacy-sar-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_legacy-sar-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_legacy-sar-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_legacy-sar-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_legacy-sar-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_legacy-sar-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_legacy-sar-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_legacy-sar-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_legacy-sar-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_legacy-sar-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_legacy-sar-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_legacy-sar-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_legacy-sar-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_legacy-sar-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_legacy-sar-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_legal-document-composite-service/alerting-profile/default.json delete mode 100644 BMW-Dynatrace-config/CD_legal-document-composite-service/alerting-profile/legal-document-composite-service.json create mode 100644 BMW-Dynatrace-config/CD_legal-document-composite-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_legal-document-composite-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_legal-document-composite-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_legal-document-composite-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_legal-document-composite-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_legal-document-composite-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_legal-document-composite-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_legal-document-composite-service/dashboard/defaultPRODE2E.json delete mode 100644 BMW-Dynatrace-config/CD_legal-document-composite-service/management-zone/CDlegal-document-composite-service.json create mode 100644 BMW-Dynatrace-config/CD_legal-document-composite-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_legal-document-composite-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_legal-document-composite-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_legal-document-composite-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_legal-document-composite-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_legal-document-composite-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_legal-document-composite-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_legal-document-composite-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_legal-document-composite-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_log-data-deletion-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_log-data-deletion-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_log-data-deletion-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_log-data-deletion-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_log-data-deletion-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_log-data-deletion-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_log-data-deletion-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_log-data-deletion-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_log-data-deletion-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_log-data-deletion-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_log-data-deletion-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_log-data-deletion-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_log-data-deletion-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_log-data-deletion-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_log-data-deletion-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_log-data-deletion-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_log-data-deletion-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_log-data-deletion-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_log-data-deletion-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_log-data-deletion-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_lsc-kc/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_lsc-kc/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_lsc-kc/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_lsc-kc/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_lsc-kc/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_lsc-kc/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_lsc-kc/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_lsc-kc/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_lsc-kc/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_lsc-kc/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_lsc-kc/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_lsc-kc/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_lsc-kc/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_lsc-kc/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_lsc-kc/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_lsc-kc/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_lsc-kc/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_lsc-kc/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_lsc-kc/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_lsc-kc/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_lsc-mm/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_lsc-mm/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_lsc-mm/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_lsc-mm/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_lsc-mm/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_lsc-mm/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_lsc-mm/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_lsc-mm/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_lsc-mm/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_lsc-mm/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_lsc-mm/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_lsc-mm/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_lsc-mm/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_lsc-mm/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_lsc-mm/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_lsc-mm/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_lsc-mm/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_lsc-mm/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_lsc-mm/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_lsc-mm/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_lsc-oc/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_lsc-oc/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_lsc-oc/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_lsc-oc/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_lsc-oc/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_lsc-oc/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_lsc-oc/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_lsc-oc/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_lsc-oc/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_lsc-oc/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_lsc-oc/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_lsc-oc/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_lsc-oc/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_lsc-oc/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_lsc-oc/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_lsc-oc/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_lsc-oc/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_lsc-oc/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_lsc-oc/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_lsc-oc/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_lsc-og/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_lsc-og/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_lsc-og/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_lsc-og/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_lsc-og/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_lsc-og/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_lsc-og/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_lsc-og/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_lsc-og/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_lsc-og/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_lsc-og/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_lsc-og/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_lsc-og/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_lsc-og/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_lsc-og/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_lsc-og/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_lsc-og/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_lsc-og/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_lsc-og/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_lsc-og/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_mds/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_mds/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_mds/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_mds/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_mds/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_mds/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_mds/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_mds/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_mds/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_mds/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_mds/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_mds/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_mds/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_mds/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_mds/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_mds/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_mds/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_mds/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_mds/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_mds/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_ml-ingestion-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_ml-ingestion-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_ml-ingestion-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ml-ingestion-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_ml-ingestion-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_ml-ingestion-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_ml-ingestion-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_ml-ingestion-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_ml-ingestion-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_ml-ingestion-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_ml-ingestion-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_ml-ingestion-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_ml-ingestion-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_ml-ingestion-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_ml-ingestion-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_ml-ingestion-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_ml-ingestion-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_ml-ingestion-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_ml-ingestion-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_ml-ingestion-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_mlc/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_mlc/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_mlc/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_mlc/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_mlc/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_mlc/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_mlc/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_mlc/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_mlc/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_mlc/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_mlc/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_mlc/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_mlc/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_mlc/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_mlc/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_mlc/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_mlc/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_mlc/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_mlc/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_mlc/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_mrp/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_mrp/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_mrp/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_mrp/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_mrp/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_mrp/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_mrp/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_mrp/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_mrp/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_mrp/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_mrp/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_mrp/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_mrp/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_mrp/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_mrp/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_mrp/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_mrp/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_mrp/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_mrp/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_mrp/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_mrpspringboot/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_mrpspringboot/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_mrpspringboot/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_mrpspringboot/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_mrpspringboot/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_mrpspringboot/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_mrpspringboot/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_mrpspringboot/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_mrpspringboot/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_mrpspringboot/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_mrpspringboot/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_mrpspringboot/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_mrpspringboot/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_mrpspringboot/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_mrpspringboot/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_mrpspringboot/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_mrpspringboot/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_mrpspringboot/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_mrpspringboot/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_mrpspringboot/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_nop-admin/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_nop-admin/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_nop-admin/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_nop-admin/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_nop-admin/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_nop-admin/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_nop-admin/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_nop-admin/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_nop-admin/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_nop-admin/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_nop-admin/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_nop-admin/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_nop-admin/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_nop-admin/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_nop-admin/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_nop-admin/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_nop-admin/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_nop-admin/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_nop-admin/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_nop-admin/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_nop-archive/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_nop-archive/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_nop-archive/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_nop-archive/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_nop-archive/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_nop-archive/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_nop-archive/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_nop-archive/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_nop-archive/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_nop-archive/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_nop-archive/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_nop-archive/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_nop-archive/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_nop-archive/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_nop-archive/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_nop-archive/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_nop-archive/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_nop-archive/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_nop-archive/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_nop-archive/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_nop-provisioning/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_nop-provisioning/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_nop-provisioning/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_nop-provisioning/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_nop-provisioning/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_nop-provisioning/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_nop-provisioning/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_nop-provisioning/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_nop-provisioning/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_nop-provisioning/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_nop-provisioning/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_nop-provisioning/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_nop-provisioning/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_nop-provisioning/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_nop-provisioning/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_nop-provisioning/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_nop-provisioning/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_nop-provisioning/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_nop-provisioning/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_nop-provisioning/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_nop-trigger/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_nop-trigger/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_nop-trigger/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_nop-trigger/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_nop-trigger/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_nop-trigger/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_nop-trigger/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_nop-trigger/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_nop-trigger/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_nop-trigger/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_nop-trigger/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_nop-trigger/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_nop-trigger/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_nop-trigger/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_nop-trigger/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_nop-trigger/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_nop-trigger/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_nop-trigger/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_nop-trigger/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_nop-trigger/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_notification-composite-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_notification-composite-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_notification-composite-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_notification-composite-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_notification-composite-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_notification-composite-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_notification-composite-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_notification-composite-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_notification-composite-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_notification-composite-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_notification-composite-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_notification-composite-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_notification-composite-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_notification-composite-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_notification-composite-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_notification-composite-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_notification-composite-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_notification-composite-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_notification-composite-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_notification-composite-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_notification-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_notification-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_notification-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_notification-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_notification-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_notification-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_notification-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_notification-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_notification-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_notification-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_notification-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_notification-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_notification-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_notification-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_notification-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_notification-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_notification-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_notification-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_notification-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_notification-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_oas-composite-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_oas-composite-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_oas-composite-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_oas-composite-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_oas-composite-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_oas-composite-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_oas-composite-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_oas-composite-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_oas-composite-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_oas-composite-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_oas-composite-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_oas-composite-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_oas-composite-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_oas-composite-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_oas-composite-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_oas-composite-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_oas-composite-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_oas-composite-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_oas-composite-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_oas-composite-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_oclisc2v/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_oclisc2v/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_oclisc2v/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_oclisc2v/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_oclisc2v/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_oclisc2v/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_oclisc2v/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_oclisc2v/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_oclisc2v/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_oclisc2v/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_oclisc2v/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_oclisc2v/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_oclisc2v/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_oclisc2v/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_oclisc2v/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_oclisc2v/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_oclisc2v/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_oclisc2v/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_oclisc2v/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_oclisc2v/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_oclisocsp/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_oclisocsp/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_oclisocsp/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_oclisocsp/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_oclisocsp/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_oclisocsp/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_oclisocsp/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_oclisocsp/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_oclisocsp/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_oclisocsp/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_oclisocsp/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_oclisocsp/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_oclisocsp/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_oclisocsp/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_oclisocsp/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_oclisocsp/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_oclisocsp/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_oclisocsp/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_oclisocsp/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_oclisocsp/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_omc-cd-services/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_omc-cd-services/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_omc-cd-services/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_omc-cd-services/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_omc-cd-services/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_omc-cd-services/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_omc-cd-services/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_omc-cd-services/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_omc-cd-services/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_omc-cd-services/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_omc-cd-services/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_omc-cd-services/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_omc-cd-services/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_omc-cd-services/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_omc-cd-services/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_omc-cd-services/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_omc-cd-services/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_omc-cd-services/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_omc-cd-services/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_omc-cd-services/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_omg/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_omg/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_omg/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_omg/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_omg/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_omg/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_omg/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_omg/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_omg/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_omg/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_omg/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_omg/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_omg/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_omg/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_omg/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_omg/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_omg/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_omg/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_omg/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_omg/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_onboard-navigation-sync-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_onboard-navigation-sync-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_onboard-navigation-sync-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_onboard-navigation-sync-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_onboard-navigation-sync-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_onboard-navigation-sync-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_onboard-navigation-sync-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_onboard-navigation-sync-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_onboard-navigation-sync-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_onboard-navigation-sync-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_onboard-navigation-sync-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_onboard-navigation-sync-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_onboard-navigation-sync-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_onboard-navigation-sync-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_onboard-navigation-sync-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_onboard-navigation-sync-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_onboard-navigation-sync-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_onboard-navigation-sync-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_onboard-navigation-sync-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_onboard-navigation-sync-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_online-appointment-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_online-appointment-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_online-appointment-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_online-appointment-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_online-appointment-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_online-appointment-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_online-appointment-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_online-appointment-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_online-appointment-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_online-appointment-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_online-appointment-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_online-appointment-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_online-appointment-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_online-appointment-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_online-appointment-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_online-appointment-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_online-appointment-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_online-appointment-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_online-appointment-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_online-appointment-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_online-entertainment/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_online-entertainment/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_online-entertainment/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_online-entertainment/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_online-entertainment/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_online-entertainment/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_online-entertainment/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_online-entertainment/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_online-entertainment/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_online-entertainment/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_online-entertainment/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_online-entertainment/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_online-entertainment/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_online-entertainment/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_online-entertainment/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_online-entertainment/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_online-entertainment/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_online-entertainment/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_online-entertainment/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_online-entertainment/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_pdmmanager/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_pdmmanager/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_pdmmanager/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_pdmmanager/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_pdmmanager/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_pdmmanager/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_pdmmanager/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_pdmmanager/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_pdmmanager/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_pdmmanager/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_pdmmanager/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_pdmmanager/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_pdmmanager/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_pdmmanager/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_pdmmanager/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_pdmmanager/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_pdmmanager/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_pdmmanager/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_pdmmanager/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_pdmmanager/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_personal-data-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_personal-data-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_personal-data-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_personal-data-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_personal-data-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_personal-data-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_personal-data-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_personal-data-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_personal-data-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_personal-data-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_personal-data-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_personal-data-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_personal-data-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_personal-data-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_personal-data-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_personal-data-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_personal-data-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_personal-data-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_personal-data-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_personal-data-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_pmuimapper-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_pmuimapper-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_pmuimapper-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_pmuimapper-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_pmuimapper-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_pmuimapper-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_pmuimapper-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_pmuimapper-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_pmuimapper-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_pmuimapper-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_pmuimapper-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_pmuimapper-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_pmuimapper-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_pmuimapper-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_pmuimapper-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_pmuimapper-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_pmuimapper-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_pmuimapper-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_pmuimapper-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_pmuimapper-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_push-notification-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_push-notification-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_push-notification-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_push-notification-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_push-notification-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_push-notification-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_push-notification-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_push-notification-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_push-notification-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_push-notification-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_push-notification-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_push-notification-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_push-notification-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_push-notification-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_push-notification-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_push-notification-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_push-notification-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_push-notification-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_push-notification-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_push-notification-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_push-notification-settings-composite-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_push-notification-settings-composite-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_push-notification-settings-composite-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_push-notification-settings-composite-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_push-notification-settings-composite-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_push-notification-settings-composite-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_push-notification-settings-composite-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_push-notification-settings-composite-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_push-notification-settings-composite-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_push-notification-settings-composite-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_push-notification-settings-composite-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_push-notification-settings-composite-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_push-notification-settings-composite-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_push-notification-settings-composite-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_push-notification-settings-composite-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_push-notification-settings-composite-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_push-notification-settings-composite-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_push-notification-settings-composite-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_push-notification-settings-composite-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_push-notification-settings-composite-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-analytics-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-analytics-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_recall-analytics-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-analytics-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-analytics-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-analytics-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_recall-analytics-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-analytics-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-analytics-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_recall-analytics-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_recall-analytics-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-analytics-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_recall-analytics-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-analytics-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-analytics-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_recall-analytics-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_recall-analytics-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-analytics-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-analytics-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_recall-analytics-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-client-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-client-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_recall-client-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-client-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-client-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-client-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_recall-client-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-client-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-client-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_recall-client-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_recall-client-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-client-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_recall-client-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-client-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-client-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_recall-client-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_recall-client-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-client-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-client-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_recall-client-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-handler-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-handler-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_recall-handler-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-handler-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-handler-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-handler-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_recall-handler-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-handler-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-handler-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_recall-handler-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_recall-handler-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-handler-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_recall-handler-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-handler-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-handler-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_recall-handler-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_recall-handler-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-handler-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-handler-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_recall-handler-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-notification-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-notification-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_recall-notification-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-notification-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-notification-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-notification-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_recall-notification-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-notification-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-notification-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_recall-notification-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_recall-notification-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-notification-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_recall-notification-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-notification-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-notification-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_recall-notification-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_recall-notification-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-notification-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-notification-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_recall-notification-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-scheduler-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-scheduler-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_recall-scheduler-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-scheduler-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-scheduler-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-scheduler-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_recall-scheduler-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-scheduler-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-scheduler-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_recall-scheduler-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_recall-scheduler-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-scheduler-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_recall-scheduler-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-scheduler-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-scheduler-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_recall-scheduler-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_recall-scheduler-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-scheduler-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-scheduler-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_recall-scheduler-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-tcn-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-tcn-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_recall-tcn-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-tcn-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-tcn-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-tcn-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_recall-tcn-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-tcn-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-tcn-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_recall-tcn-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_recall-tcn-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-tcn-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_recall-tcn-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-tcn-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-tcn-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_recall-tcn-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_recall-tcn-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-tcn-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-tcn-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_recall-tcn-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_remote-360-composite-service/alerting-profile/default.json delete mode 100644 BMW-Dynatrace-config/CD_remote-360-composite-service/alerting-profile/remote-360-composite-service.json create mode 100644 BMW-Dynatrace-config/CD_remote-360-composite-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_remote-360-composite-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_remote-360-composite-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_remote-360-composite-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_remote-360-composite-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_remote-360-composite-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_remote-360-composite-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_remote-360-composite-service/dashboard/defaultPRODE2E.json delete mode 100644 BMW-Dynatrace-config/CD_remote-360-composite-service/management-zone/CDremote-360-composite-service.json create mode 100644 BMW-Dynatrace-config/CD_remote-360-composite-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_remote-360-composite-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_remote-360-composite-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_remote-360-composite-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_remote-360-composite-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_remote-360-composite-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_remote-360-composite-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_remote-360-composite-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_remote-360-composite-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_remote-service-event-processor/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_remote-service-event-processor/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_remote-service-event-processor/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_remote-service-event-processor/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_remote-service-event-processor/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_remote-service-event-processor/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_remote-service-event-processor/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_remote-service-event-processor/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_remote-service-event-processor/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_remote-service-event-processor/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_remote-service-event-processor/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_remote-service-event-processor/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_remote-service-event-processor/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_remote-service-event-processor/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_remote-service-event-processor/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_remote-service-event-processor/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_remote-service-event-processor/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_remote-service-event-processor/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_remote-service-event-processor/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_remote-service-event-processor/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_remote-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_remote-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_remote-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_remote-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_remote-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_remote-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_remote-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_remote-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_remote-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_remote-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_remote-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_remote-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_remote-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_remote-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_remote-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_remote-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_remote-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_remote-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_remote-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_remote-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_remote-software-upgrade/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_remote-software-upgrade/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_remote-software-upgrade/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_remote-software-upgrade/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_remote-software-upgrade/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_remote-software-upgrade/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_remote-software-upgrade/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_remote-software-upgrade/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_remote-software-upgrade/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_remote-software-upgrade/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_remote-software-upgrade/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_remote-software-upgrade/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_remote-software-upgrade/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_remote-software-upgrade/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_remote-software-upgrade/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_remote-software-upgrade/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_remote-software-upgrade/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_remote-software-upgrade/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_remote-software-upgrade/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_remote-software-upgrade/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance-composite-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance-composite-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance-composite-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance-composite-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance-composite-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance-composite-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance-composite-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance-composite-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance-composite-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance-composite-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance-composite-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance-composite-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance-composite-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance-composite-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance-composite-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance-composite-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance-composite-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance-composite-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance-composite-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance-composite-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_rsu-adapter/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_rsu-adapter/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_rsu-adapter/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_rsu-adapter/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_rsu-adapter/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_rsu-adapter/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_rsu-adapter/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_rsu-adapter/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_rsu-adapter/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_rsu-adapter/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_rsu-adapter/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_rsu-adapter/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_rsu-adapter/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_rsu-adapter/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_rsu-adapter/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_rsu-adapter/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_rsu-adapter/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_rsu-adapter/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_rsu-adapter/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_rsu-adapter/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_rsu/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_rsu/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_rsu/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_rsu/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_rsu/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_rsu/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_rsu/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_rsu/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_rsu/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_rsu/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_rsu/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_rsu/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_rsu/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_rsu/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_rsu/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_rsu/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_rsu/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_rsu/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_rsu/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_rsu/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_sbr/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_sbr/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_sbr/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_sbr/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_sbr/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_sbr/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_sbr/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_sbr/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_sbr/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_sbr/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_sbr/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_sbr/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_sbr/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_sbr/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_sbr/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_sbr/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_sbr/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_sbr/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_sbr/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_sbr/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_scb/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_scb/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_scb/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_scb/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_scb/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_scb/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_scb/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_scb/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_scb/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_scb/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_scb/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_scb/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_scb/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_scb/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_scb/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_scb/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_scb/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_scb/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_scb/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_scb/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_scc/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_scc/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_scc/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_scc/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_scc/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_scc/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_scc/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_scc/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_scc/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_scc/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_scc/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_scc/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_scc/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_scc/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_scc/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_scc/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_scc/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_scc/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_scc/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_scc/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_scm-agentreg/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_scm-agentreg/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_scm-agentreg/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_scm-agentreg/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_scm-agentreg/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_scm-agentreg/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_scm-agentreg/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_scm-agentreg/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_scm-agentreg/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_scm-agentreg/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_scm-agentreg/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_scm-agentreg/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_scm-agentreg/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_scm-agentreg/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_scm-agentreg/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_scm-agentreg/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_scm-agentreg/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_scm-agentreg/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_scm-agentreg/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_scm-agentreg/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_scm-scm/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_scm-scm/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_scm-scm/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_scm-scm/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_scm-scm/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_scm-scm/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_scm-scm/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_scm-scm/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_scm-scm/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_scm-scm/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_scm-scm/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_scm-scm/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_scm-scm/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_scm-scm/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_scm-scm/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_scm-scm/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_scm-scm/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_scm-scm/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_scm-scm/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_scm-scm/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_scma-backend/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_scma-backend/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_scma-backend/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_scma-backend/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_scma-backend/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_scma-backend/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_scma-backend/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_scma-backend/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_scma-backend/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_scma-backend/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_scma-backend/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_scma-backend/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_scma-backend/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_scma-backend/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_scma-backend/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_scma-backend/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_scma-backend/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_scma-backend/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_scma-backend/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_scma-backend/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_seam-event-consumer/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_seam-event-consumer/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_seam-event-consumer/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_seam-event-consumer/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_seam-event-consumer/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_seam-event-consumer/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_seam-event-consumer/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_seam-event-consumer/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_seam-event-consumer/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_seam-event-consumer/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_seam-event-consumer/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_seam-event-consumer/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_seam-event-consumer/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_seam-event-consumer/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_seam-event-consumer/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_seam-event-consumer/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_seam-event-consumer/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_seam-event-consumer/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_seam-event-consumer/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_seam-event-consumer/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_seam-event-producer/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_seam-event-producer/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_seam-event-producer/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_seam-event-producer/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_seam-event-producer/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_seam-event-producer/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_seam-event-producer/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_seam-event-producer/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_seam-event-producer/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_seam-event-producer/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_seam-event-producer/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_seam-event-producer/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_seam-event-producer/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_seam-event-producer/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_seam-event-producer/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_seam-event-producer/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_seam-event-producer/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_seam-event-producer/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_seam-event-producer/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_seam-event-producer/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_search-composite-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_search-composite-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_search-composite-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_search-composite-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_search-composite-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_search-composite-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_search-composite-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_search-composite-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_search-composite-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_search-composite-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_search-composite-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_search-composite-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_search-composite-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_search-composite-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_search-composite-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_search-composite-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_search-composite-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_search-composite-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_search-composite-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_search-composite-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_send-to-car-service/alerting-profile/default.json delete mode 100644 BMW-Dynatrace-config/CD_send-to-car-service/alerting-profile/send-to-car-service.json create mode 100644 BMW-Dynatrace-config/CD_send-to-car-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_send-to-car-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_send-to-car-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_send-to-car-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_send-to-car-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_send-to-car-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_send-to-car-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_send-to-car-service/dashboard/defaultPRODE2E.json delete mode 100644 BMW-Dynatrace-config/CD_send-to-car-service/management-zone/CDsend-to-car-service.json create mode 100644 BMW-Dynatrace-config/CD_send-to-car-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_send-to-car-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_send-to-car-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_send-to-car-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_send-to-car-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_send-to-car-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_send-to-car-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_send-to-car-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_send-to-car-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_service-manager/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_service-manager/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_service-manager/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_service-manager/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_service-manager/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_service-manager/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_service-manager/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_service-manager/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_service-manager/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_service-manager/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_service-manager/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_service-manager/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_service-manager/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_service-manager/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_service-manager/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_service-manager/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_service-manager/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_service-manager/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_service-manager/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_service-manager/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_service-notification-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_service-notification-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_service-notification-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_service-notification-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_service-notification-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_service-notification-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_service-notification-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_service-notification-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_service-notification-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_service-notification-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_service-notification-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_service-notification-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_service-notification-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_service-notification-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_service-notification-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_service-notification-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_service-notification-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_service-notification-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_service-notification-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_service-notification-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_sfa-fre/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_sfa-fre/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_sfa-fre/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_sfa-fre/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_sfa-fre/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_sfa-fre/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_sfa-fre/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_sfa-fre/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_sfa-fre/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_sfa-fre/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_sfa-fre/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_sfa-fre/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_sfa-fre/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_sfa-fre/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_sfa-fre/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_sfa-fre/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_sfa-fre/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_sfa-fre/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_sfa-fre/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_sfa-fre/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_sfa-ota/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_sfa-ota/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_sfa-ota/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_sfa-ota/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_sfa-ota/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_sfa-ota/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_sfa-ota/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_sfa-ota/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_sfa-ota/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_sfa-ota/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_sfa-ota/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_sfa-ota/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_sfa-ota/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_sfa-ota/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_sfa-ota/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_sfa-ota/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_sfa-ota/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_sfa-ota/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_sfa-ota/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_sfa-ota/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_sfa-vs/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_sfa-vs/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_sfa-vs/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_sfa-vs/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_sfa-vs/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_sfa-vs/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_sfa-vs/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_sfa-vs/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_sfa-vs/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_sfa-vs/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_sfa-vs/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_sfa-vs/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_sfa-vs/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_sfa-vs/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_sfa-vs/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_sfa-vs/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_sfa-vs/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_sfa-vs/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_sfa-vs/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_sfa-vs/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_sfa/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_sfa/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_sfa/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_sfa/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_sfa/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_sfa/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_sfa/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_sfa/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_sfa/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_sfa/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_sfa/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_sfa/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_sfa/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_sfa/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_sfa/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_sfa/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_sfa/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_sfa/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_sfa/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_sfa/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_smart-access-order-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_smart-access-order-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_smart-access-order-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_smart-access-order-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_smart-access-order-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_smart-access-order-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_smart-access-order-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_smart-access-order-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_smart-access-order-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_smart-access-order-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_smart-access-order-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_smart-access-order-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_smart-access-order-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_smart-access-order-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_smart-access-order-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_smart-access-order-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_smart-access-order-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_smart-access-order-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_smart-access-order-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_smart-access-order-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_sms-email-adapter-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_sms-email-adapter-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_sms-email-adapter-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_sms-email-adapter-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_sms-email-adapter-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_sms-email-adapter-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_sms-email-adapter-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_sms-email-adapter-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_sms-email-adapter-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_sms-email-adapter-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_sms-email-adapter-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_sms-email-adapter-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_sms-email-adapter-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_sms-email-adapter-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_sms-email-adapter-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_sms-email-adapter-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_sms-email-adapter-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_sms-email-adapter-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_sms-email-adapter-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_sms-email-adapter-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_srmanager/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_srmanager/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_srmanager/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_srmanager/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_srmanager/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_srmanager/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_srmanager/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_srmanager/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_srmanager/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_srmanager/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_srmanager/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_srmanager/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_srmanager/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_srmanager/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_srmanager/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_srmanager/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_srmanager/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_srmanager/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_srmanager/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_srmanager/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_stm/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_stm/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_stm/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_stm/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_stm/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_stm/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_stm/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_stm/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_stm/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_stm/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_stm/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_stm/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_stm/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_stm/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_stm/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_stm/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_stm/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_stm/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_stm/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_stm/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_svcinfo/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_svcinfo/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_svcinfo/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_svcinfo/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_svcinfo/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_svcinfo/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_svcinfo/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_svcinfo/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_svcinfo/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_svcinfo/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_svcinfo/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_svcinfo/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_svcinfo/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_svcinfo/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_svcinfo/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_svcinfo/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_svcinfo/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_svcinfo/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_svcinfo/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_svcinfo/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_timer-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_timer-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_timer-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_timer-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_timer-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_timer-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_timer-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_timer-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_timer-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_timer-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_timer-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_timer-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_timer-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_timer-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_timer-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_timer-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_timer-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_timer-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_timer-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_timer-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_timers-processor/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_timers-processor/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_timers-processor/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_timers-processor/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_timers-processor/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_timers-processor/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_timers-processor/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_timers-processor/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_timers-processor/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_timers-processor/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_timers-processor/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_timers-processor/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_timers-processor/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_timers-processor/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_timers-processor/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_timers-processor/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_timers-processor/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_timers-processor/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_timers-processor/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_timers-processor/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_token-exchanger-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_token-exchanger-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_token-exchanger-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_token-exchanger-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_token-exchanger-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_token-exchanger-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_token-exchanger-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_token-exchanger-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_token-exchanger-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_token-exchanger-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_token-exchanger-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_token-exchanger-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_token-exchanger-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_token-exchanger-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_token-exchanger-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_token-exchanger-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_token-exchanger-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_token-exchanger-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_token-exchanger-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_token-exchanger-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_tol-mgu/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_tol-mgu/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_tol-mgu/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_tol-mgu/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_tol-mgu/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_tol-mgu/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_tol-mgu/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_tol-mgu/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_tol-mgu/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_tol-mgu/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_tol-mgu/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_tol-mgu/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_tol-mgu/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_tol-mgu/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_tol-mgu/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_tol-mgu/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_tol-mgu/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_tol-mgu/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_tol-mgu/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_tol-mgu/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_tol-tssb/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_tol-tssb/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_tol-tssb/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_tol-tssb/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_tol-tssb/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_tol-tssb/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_tol-tssb/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_tol-tssb/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_tol-tssb/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_tol-tssb/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_tol-tssb/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_tol-tssb/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_tol-tssb/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_tol-tssb/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_tol-tssb/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_tol-tssb/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_tol-tssb/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_tol-tssb/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_tol-tssb/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_tol-tssb/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_tol/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_tol/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_tol/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_tol/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_tol/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_tol/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_tol/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_tol/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_tol/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_tol/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_tol/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_tol/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_tol/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_tol/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_tol/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_tol/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_tol/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_tol/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_tol/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_tol/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-change-processor/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-change-processor/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_trip-change-processor/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-change-processor/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-change-processor/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-change-processor/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_trip-change-processor/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-change-processor/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-change-processor/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_trip-change-processor/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_trip-change-processor/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-change-processor/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_trip-change-processor/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-change-processor/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-change-processor/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_trip-change-processor/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_trip-change-processor/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-change-processor/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-change-processor/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_trip-change-processor/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-cleanup-app-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-cleanup-app-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_trip-cleanup-app-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-cleanup-app-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-cleanup-app-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-cleanup-app-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_trip-cleanup-app-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-cleanup-app-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-cleanup-app-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_trip-cleanup-app-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_trip-cleanup-app-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-cleanup-app-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_trip-cleanup-app-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-cleanup-app-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-cleanup-app-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_trip-cleanup-app-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_trip-cleanup-app-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-cleanup-app-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-cleanup-app-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_trip-cleanup-app-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-monitor-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-monitor-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_trip-monitor-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-monitor-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-monitor-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-monitor-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_trip-monitor-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-monitor-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-monitor-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_trip-monitor-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_trip-monitor-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-monitor-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_trip-monitor-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-monitor-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-monitor-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_trip-monitor-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_trip-monitor-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-monitor-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-monitor-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_trip-monitor-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-reminder-processor/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-reminder-processor/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_trip-reminder-processor/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-reminder-processor/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-reminder-processor/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-reminder-processor/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_trip-reminder-processor/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-reminder-processor/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-reminder-processor/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_trip-reminder-processor/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_trip-reminder-processor/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-reminder-processor/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_trip-reminder-processor/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-reminder-processor/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-reminder-processor/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_trip-reminder-processor/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_trip-reminder-processor/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-reminder-processor/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-reminder-processor/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_trip-reminder-processor/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-route-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-route-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_trip-route-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-route-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-route-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-route-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_trip-route-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-route-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-route-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_trip-route-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_trip-route-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-route-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_trip-route-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-route-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-route-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_trip-route-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_trip-route-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-route-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-route-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_trip-route-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_trip-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_trip-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_trip-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_trip-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_trip-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_trip-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_trip-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_trip-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-bcallservice/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-bcallservice/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-bcallservice/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-bcallservice/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-bcallservice/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-bcallservice/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_ts-bcallservice/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-bcallservice/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-bcallservice/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_ts-bcallservice/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_ts-bcallservice/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-bcallservice/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-bcallservice/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-bcallservice/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-bcallservice/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_ts-bcallservice/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_ts-bcallservice/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-bcallservice/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-bcallservice/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-bcallservice/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-bt/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-bt/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-bt/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-bt/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-bt/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-bt/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_ts-bt/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-bt/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-bt/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_ts-bt/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_ts-bt/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-bt/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-bt/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-bt/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-bt/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_ts-bt/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_ts-bt/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-bt/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-bt/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-bt/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-bti/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-bti/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-bti/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-bti/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-bti/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-bti/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_ts-bti/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-bti/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-bti/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_ts-bti/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_ts-bti/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-bti/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-bti/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-bti/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-bti/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_ts-bti/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_ts-bti/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-bti/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-bti/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-bti/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-cas-spm/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-cas-spm/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-cas-spm/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-cas-spm/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-cas-spm/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-cas-spm/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_ts-cas-spm/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-cas-spm/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-cas-spm/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_ts-cas-spm/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_ts-cas-spm/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-cas-spm/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-cas-spm/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-cas-spm/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-cas-spm/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_ts-cas-spm/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_ts-cas-spm/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-cas-spm/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-cas-spm/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-cas-spm/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-cas-stm/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-cas-stm/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-cas-stm/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-cas-stm/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-cas-stm/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-cas-stm/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_ts-cas-stm/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-cas-stm/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-cas-stm/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_ts-cas-stm/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_ts-cas-stm/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-cas-stm/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-cas-stm/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-cas-stm/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-cas-stm/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_ts-cas-stm/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_ts-cas-stm/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-cas-stm/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-cas-stm/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-cas-stm/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-datadispatcher/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-datadispatcher/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-datadispatcher/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-datadispatcher/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-datadispatcher/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-datadispatcher/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_ts-datadispatcher/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-datadispatcher/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-datadispatcher/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_ts-datadispatcher/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_ts-datadispatcher/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-datadispatcher/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-datadispatcher/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-datadispatcher/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-datadispatcher/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_ts-datadispatcher/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_ts-datadispatcher/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-datadispatcher/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-datadispatcher/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-datadispatcher/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-diagservice/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-diagservice/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-diagservice/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-diagservice/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-diagservice/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-diagservice/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_ts-diagservice/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-diagservice/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-diagservice/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_ts-diagservice/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_ts-diagservice/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-diagservice/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-diagservice/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-diagservice/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-diagservice/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_ts-diagservice/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_ts-diagservice/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-diagservice/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-diagservice/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-diagservice/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-eshad/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-eshad/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-eshad/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-eshad/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-eshad/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-eshad/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_ts-eshad/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-eshad/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-eshad/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_ts-eshad/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_ts-eshad/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-eshad/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-eshad/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-eshad/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-eshad/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_ts-eshad/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_ts-eshad/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-eshad/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-eshad/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-eshad/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-message-receiver/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-message-receiver/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-message-receiver/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-message-receiver/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-message-receiver/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-message-receiver/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_ts-message-receiver/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-message-receiver/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-message-receiver/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_ts-message-receiver/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_ts-message-receiver/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-message-receiver/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-message-receiver/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-message-receiver/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-message-receiver/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_ts-message-receiver/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_ts-message-receiver/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-message-receiver/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-message-receiver/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-message-receiver/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-pdmupdater/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-pdmupdater/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-pdmupdater/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-pdmupdater/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-pdmupdater/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-pdmupdater/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_ts-pdmupdater/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-pdmupdater/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-pdmupdater/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_ts-pdmupdater/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_ts-pdmupdater/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-pdmupdater/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-pdmupdater/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-pdmupdater/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-pdmupdater/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_ts-pdmupdater/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_ts-pdmupdater/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-pdmupdater/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-pdmupdater/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-pdmupdater/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-pservice/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-pservice/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-pservice/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-pservice/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-pservice/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-pservice/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_ts-pservice/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-pservice/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-pservice/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_ts-pservice/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_ts-pservice/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-pservice/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-pservice/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-pservice/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-pservice/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_ts-pservice/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_ts-pservice/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-pservice/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-pservice/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-pservice/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-remotediagnosis/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-remotediagnosis/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-remotediagnosis/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-remotediagnosis/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-remotediagnosis/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-remotediagnosis/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_ts-remotediagnosis/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-remotediagnosis/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-remotediagnosis/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_ts-remotediagnosis/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_ts-remotediagnosis/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-remotediagnosis/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-remotediagnosis/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-remotediagnosis/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-remotediagnosis/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_ts-remotediagnosis/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_ts-remotediagnosis/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-remotediagnosis/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-remotediagnosis/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-remotediagnosis/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-rsurservice/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-rsurservice/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-rsurservice/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-rsurservice/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-rsurservice/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-rsurservice/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_ts-rsurservice/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-rsurservice/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-rsurservice/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_ts-rsurservice/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_ts-rsurservice/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-rsurservice/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-rsurservice/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-rsurservice/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-rsurservice/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_ts-rsurservice/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_ts-rsurservice/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-rsurservice/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-rsurservice/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-rsurservice/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-rtcadapter/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-rtcadapter/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-rtcadapter/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-rtcadapter/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-rtcadapter/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-rtcadapter/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_ts-rtcadapter/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-rtcadapter/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-rtcadapter/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_ts-rtcadapter/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_ts-rtcadapter/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-rtcadapter/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-rtcadapter/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-rtcadapter/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-rtcadapter/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_ts-rtcadapter/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_ts-rtcadapter/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-rtcadapter/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-rtcadapter/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-rtcadapter/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-rtchandler/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-rtchandler/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-rtchandler/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-rtchandler/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-rtchandler/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-rtchandler/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_ts-rtchandler/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-rtchandler/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-rtchandler/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_ts-rtchandler/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_ts-rtchandler/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-rtchandler/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-rtchandler/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-rtchandler/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-rtchandler/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_ts-rtchandler/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_ts-rtchandler/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-rtchandler/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-rtchandler/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-rtchandler/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-rtcservice/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-rtcservice/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-rtcservice/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-rtcservice/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-rtcservice/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-rtcservice/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_ts-rtcservice/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-rtcservice/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-rtcservice/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_ts-rtcservice/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_ts-rtcservice/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-rtcservice/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-rtcservice/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-rtcservice/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-rtcservice/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_ts-rtcservice/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_ts-rtcservice/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-rtcservice/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-rtcservice/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-rtcservice/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-scallservice/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-scallservice/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-scallservice/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-scallservice/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-scallservice/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-scallservice/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_ts-scallservice/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-scallservice/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-scallservice/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_ts-scallservice/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_ts-scallservice/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-scallservice/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-scallservice/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-scallservice/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-scallservice/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_ts-scallservice/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_ts-scallservice/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-scallservice/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-scallservice/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-scallservice/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgam/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgam/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgam/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgam/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgam/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgam/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgam/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgam/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgam/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgam/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgam/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgam/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgam/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgam/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgam/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgam/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgam/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgam/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgam/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgam/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgservice/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgservice/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgservice/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgservice/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgservice/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgservice/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgservice/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgservice/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgservice/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgservice/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgservice/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgservice/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgservice/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgservice/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgservice/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgservice/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgservice/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgservice/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgservice/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgservice/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-tsp/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-tsp/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-tsp/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-tsp/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-tsp/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-tsp/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_ts-tsp/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-tsp/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-tsp/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_ts-tsp/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_ts-tsp/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-tsp/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-tsp/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-tsp/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-tsp/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_ts-tsp/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_ts-tsp/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-tsp/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-tsp/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-tsp/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-wlupdater/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-wlupdater/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-wlupdater/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-wlupdater/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-wlupdater/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-wlupdater/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_ts-wlupdater/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-wlupdater/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-wlupdater/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_ts-wlupdater/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_ts-wlupdater/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-wlupdater/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-wlupdater/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-wlupdater/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-wlupdater/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_ts-wlupdater/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_ts-wlupdater/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-wlupdater/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-wlupdater/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_ts-wlupdater/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_tscs/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_tscs/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_tscs/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_tscs/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_tscs/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_tscs/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_tscs/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_tscs/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_tscs/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_tscs/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_tscs/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_tscs/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_tscs/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_tscs/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_tscs/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_tscs/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_tscs/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_tscs/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_tscs/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_tscs/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_tsmb/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_tsmb/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_tsmb/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_tsmb/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_tsmb/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_tsmb/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_tsmb/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_tsmb/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_tsmb/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_tsmb/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_tsmb/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_tsmb/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_tsmb/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_tsmb/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_tsmb/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_tsmb/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_tsmb/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_tsmb/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_tsmb/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_tsmb/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_tsr-cmr/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_tsr-cmr/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_tsr-cmr/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_tsr-cmr/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_tsr-cmr/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_tsr-cmr/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_tsr-cmr/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_tsr-cmr/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_tsr-cmr/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_tsr-cmr/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_tsr-cmr/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_tsr-cmr/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_tsr-cmr/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_tsr-cmr/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_tsr-cmr/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_tsr-cmr/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_tsr-cmr/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_tsr-cmr/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_tsr-cmr/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_tsr-cmr/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_tsr-dd/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_tsr-dd/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_tsr-dd/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_tsr-dd/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_tsr-dd/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_tsr-dd/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_tsr-dd/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_tsr-dd/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_tsr-dd/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_tsr-dd/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_tsr-dd/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_tsr-dd/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_tsr-dd/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_tsr-dd/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_tsr-dd/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_tsr-dd/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_tsr-dd/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_tsr-dd/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_tsr-dd/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_tsr-dd/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_tsr-vu/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_tsr-vu/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_tsr-vu/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_tsr-vu/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_tsr-vu/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_tsr-vu/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_tsr-vu/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_tsr-vu/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_tsr-vu/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_tsr-vu/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_tsr-vu/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_tsr-vu/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_tsr-vu/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_tsr-vu/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_tsr-vu/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_tsr-vu/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_tsr-vu/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_tsr-vu/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_tsr-vu/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_tsr-vu/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_tsrservice/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_tsrservice/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_tsrservice/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_tsrservice/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_tsrservice/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_tsrservice/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_tsrservice/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_tsrservice/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_tsrservice/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_tsrservice/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_tsrservice/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_tsrservice/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_tsrservice/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_tsrservice/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_tsrservice/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_tsrservice/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_tsrservice/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_tsrservice/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_tsrservice/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_tsrservice/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_user-activity-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_user-activity-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_user-activity-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_user-activity-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_user-activity-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_user-activity-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_user-activity-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_user-activity-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_user-activity-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_user-activity-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_user-activity-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_user-activity-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_user-activity-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_user-activity-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_user-activity-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_user-activity-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_user-activity-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_user-activity-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_user-activity-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_user-activity-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_user-attributes-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_user-attributes-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_user-attributes-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_user-attributes-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_user-attributes-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_user-attributes-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_user-attributes-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_user-attributes-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_user-attributes-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_user-attributes-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_user-attributes-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_user-attributes-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_user-attributes-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_user-attributes-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_user-attributes-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_user-attributes-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_user-attributes-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_user-attributes-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_user-attributes-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_user-attributes-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_user-composite-service/alerting-profile/default.json delete mode 100644 BMW-Dynatrace-config/CD_user-composite-service/alerting-profile/user-composite-service.json create mode 100644 BMW-Dynatrace-config/CD_user-composite-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_user-composite-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_user-composite-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_user-composite-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_user-composite-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_user-composite-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_user-composite-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_user-composite-service/dashboard/defaultPRODE2E.json delete mode 100644 BMW-Dynatrace-config/CD_user-composite-service/management-zone/CDuser-composite-service.json create mode 100644 BMW-Dynatrace-config/CD_user-composite-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_user-composite-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_user-composite-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_user-composite-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_user-composite-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_user-composite-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_user-composite-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_user-composite-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_user-composite-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_user-delete-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_user-delete-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_user-delete-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_user-delete-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_user-delete-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_user-delete-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_user-delete-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_user-delete-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_user-delete-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_user-delete-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_user-delete-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_user-delete-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_user-delete-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_user-delete-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_user-delete-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_user-delete-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_user-delete-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_user-delete-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_user-delete-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_user-delete-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_user-position-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_user-position-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_user-position-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_user-position-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_user-position-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_user-position-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_user-position-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_user-position-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_user-position-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_user-position-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_user-position-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_user-position-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_user-position-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_user-position-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_user-position-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_user-position-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_user-position-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_user-position-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_user-position-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_user-position-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_user-profile-service/alerting-profile/default.json delete mode 100644 BMW-Dynatrace-config/CD_user-profile-service/alerting-profile/user-profile-service.json create mode 100644 BMW-Dynatrace-config/CD_user-profile-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_user-profile-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_user-profile-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_user-profile-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_user-profile-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_user-profile-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_user-profile-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_user-profile-service/dashboard/defaultPRODE2E.json delete mode 100644 BMW-Dynatrace-config/CD_user-profile-service/management-zone/CDuser-profile-service.json create mode 100644 BMW-Dynatrace-config/CD_user-profile-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_user-profile-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_user-profile-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_user-profile-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_user-profile-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_user-profile-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_user-profile-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_user-profile-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_user-profile-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_usid-filter-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_usid-filter-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_usid-filter-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_usid-filter-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_usid-filter-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_usid-filter-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_usid-filter-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_usid-filter-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_usid-filter-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_usid-filter-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_usid-filter-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_usid-filter-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_usid-filter-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_usid-filter-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_usid-filter-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_usid-filter-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_usid-filter-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_usid-filter-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_usid-filter-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_usid-filter-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-composite-service/alerting-profile/default.json delete mode 100644 BMW-Dynatrace-config/CD_vehicle-composite-service/alerting-profile/vehicle-composite-service.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-composite-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-composite-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-composite-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-composite-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-composite-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-composite-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-composite-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-composite-service/dashboard/defaultPRODE2E.json delete mode 100644 BMW-Dynatrace-config/CD_vehicle-composite-service/management-zone/CDvehicle-composite-service.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-composite-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-composite-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-composite-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-composite-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-composite-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-composite-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-composite-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-composite-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-composite-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-features-service/alerting-profile/default.json delete mode 100644 BMW-Dynatrace-config/CD_vehicle-features-service/alerting-profile/vehicle-features-service.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-features-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-features-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-features-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-features-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-features-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-features-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-features-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-features-service/dashboard/defaultPRODE2E.json delete mode 100644 BMW-Dynatrace-config/CD_vehicle-features-service/management-zone/CDvehicle-features-service.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-features-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-features-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-features-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-features-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-features-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-features-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-features-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-features-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-features-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-list-proxy-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-list-proxy-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-list-proxy-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-list-proxy-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-list-proxy-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-list-proxy-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-list-proxy-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-list-proxy-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-list-proxy-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-list-proxy-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-list-proxy-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-list-proxy-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-list-proxy-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-list-proxy-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-list-proxy-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-list-proxy-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-list-proxy-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-list-proxy-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-list-proxy-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-list-proxy-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/alerting-profile/default.json delete mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/alerting-profile/vehicle-mapping-composite-service.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/dashboard/defaultPRODE2E.json delete mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/management-zone/CDvehicle-mapping-composite-service.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/alerting-profile/default.json delete mode 100644 BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/alerting-profile/vehicle-remote-commands-composite-service.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/dashboard/defaultPRODE2E.json delete mode 100644 BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/management-zone/CDvehicle-remote-commands-composite-service.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-alert/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-alert/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-alert/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-alert/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-alert/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-alert/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-alert/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-alert/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-alert/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-alert/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-alert/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-alert/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-alert/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-alert/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-alert/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-alert/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-alert/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-alert/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-alert/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-alert/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-background/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-background/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-background/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-background/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-background/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-background/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-background/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-background/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-background/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-background/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-background/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-background/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-background/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-background/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-background/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-background/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-background/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-background/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-background/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-background/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-staging/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-staging/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-staging/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-staging/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-staging/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-staging/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-staging/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-staging/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-staging/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-staging/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-staging/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-staging/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-staging/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-staging/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-staging/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-staging/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-staging/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-staging/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-staging/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-staging/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-service/alerting-profile/default.json delete mode 100644 BMW-Dynatrace-config/CD_vehicle-service/alerting-profile/vehicle-service.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-service/dashboard/defaultPRODE2E.json delete mode 100644 BMW-Dynatrace-config/CD_vehicle-service/management-zone/CDvehicle-service.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/alerting-profile/default.json delete mode 100644 BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/alerting-profile/vehicle-shadow-event-processor.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/dashboard/defaultPRODE2E.json delete mode 100644 BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/management-zone/CDvehicle-shadow-event-processor.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-status-proxy-service/alerting-profile/default.json delete mode 100644 BMW-Dynatrace-config/CD_vehicle-status-proxy-service/alerting-profile/vehicle-status-proxy-service.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-status-proxy-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-status-proxy-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-status-proxy-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-status-proxy-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-status-proxy-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-status-proxy-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-status-proxy-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-status-proxy-service/dashboard/defaultPRODE2E.json delete mode 100644 BMW-Dynatrace-config/CD_vehicle-status-proxy-service/management-zone/CDvehicle-status-proxy-service.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-status-proxy-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-status-proxy-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-status-proxy-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-status-proxy-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-status-proxy-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-status-proxy-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-status-proxy-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-status-proxy-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-status-proxy-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-user-relationship-service/alerting-profile/default.json delete mode 100644 BMW-Dynatrace-config/CD_vehicle-user-relationship-service/alerting-profile/vehicle-user-relationship-service.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-user-relationship-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-user-relationship-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-user-relationship-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-user-relationship-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-user-relationship-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-user-relationship-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-user-relationship-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-user-relationship-service/dashboard/defaultPRODE2E.json delete mode 100644 BMW-Dynatrace-config/CD_vehicle-user-relationship-service/management-zone/CDvehicle-user-relationship-service.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-user-relationship-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-user-relationship-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-user-relationship-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-user-relationship-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-user-relationship-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-user-relationship-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-user-relationship-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-user-relationship-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-user-relationship-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_vin-list-generator-service/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_vin-list-generator-service/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_vin-list-generator-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vin-list-generator-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_vin-list-generator-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_vin-list-generator-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_vin-list-generator-service/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_vin-list-generator-service/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_vin-list-generator-service/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_vin-list-generator-service/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_vin-list-generator-service/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_vin-list-generator-service/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_vin-list-generator-service/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_vin-list-generator-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_vin-list-generator-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_vin-list-generator-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_vin-list-generator-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_vin-list-generator-service/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_vin-list-generator-service/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_vin-list-generator-service/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-admin/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-admin/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_vps-admin/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-admin/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-admin/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-admin/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_vps-admin/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-admin/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-admin/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_vps-admin/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_vps-admin/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-admin/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_vps-admin/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-admin/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-admin/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_vps-admin/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_vps-admin/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-admin/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-admin/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_vps-admin/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-archive/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-archive/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_vps-archive/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-archive/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-archive/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-archive/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_vps-archive/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-archive/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-archive/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_vps-archive/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_vps-archive/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-archive/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_vps-archive/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-archive/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-archive/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_vps-archive/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_vps-archive/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-archive/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-archive/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_vps-archive/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-monitor/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-monitor/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_vps-monitor/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-monitor/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-monitor/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-monitor/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_vps-monitor/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-monitor/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-monitor/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_vps-monitor/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_vps-monitor/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-monitor/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_vps-monitor/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-monitor/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-monitor/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_vps-monitor/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_vps-monitor/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-monitor/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-monitor/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_vps-monitor/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-prov/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-prov/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_vps-prov/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-prov/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-prov/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-prov/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_vps-prov/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-prov/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-prov/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_vps-prov/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_vps-prov/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-prov/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_vps-prov/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-prov/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-prov/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_vps-prov/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_vps-prov/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-prov/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-prov/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_vps-prov/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-trigger/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-trigger/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_vps-trigger/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-trigger/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-trigger/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-trigger/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_vps-trigger/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-trigger/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-trigger/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_vps-trigger/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_vps-trigger/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-trigger/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_vps-trigger/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-trigger/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-trigger/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_vps-trigger/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_vps-trigger/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-trigger/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-trigger/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_vps-trigger/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_vs-api/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_vs-api/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_vs-api/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vs-api/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_vs-api/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_vs-api/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_vs-api/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_vs-api/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_vs-api/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_vs-api/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_vs-api/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_vs-api/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_vs-api/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_vs-api/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_vs-api/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_vs-api/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_vs-api/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_vs-api/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_vs-api/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_vs-api/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_webapi/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_webapi/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_webapi/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_webapi/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_webapi/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_webapi/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_webapi/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_webapi/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_webapi/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_webapi/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_webapi/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_webapi/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_webapi/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_webapi/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_webapi/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_webapi/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_webapi/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_webapi/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_webapi/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_webapi/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_wlmanager/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_wlmanager/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_wlmanager/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_wlmanager/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_wlmanager/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_wlmanager/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_wlmanager/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_wlmanager/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_wlmanager/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_wlmanager/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_wlmanager/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_wlmanager/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_wlmanager/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_wlmanager/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_wlmanager/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_wlmanager/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_wlmanager/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_wlmanager/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_wlmanager/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_wlmanager/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_xfcd/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_xfcd/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_xfcd/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_xfcd/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_xfcd/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_xfcd/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_xfcd/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_xfcd/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_xfcd/dashboard/defaultINTTEST.json create mode 100644 BMW-Dynatrace-config/CD_xfcd/dashboard/defaultPRODE2E.json create mode 100644 BMW-Dynatrace-config/CD_xfcd/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_xfcd/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_xfcd/management-zone/management-zone.yaml create mode 100644 BMW-Dynatrace-config/CD_xfcd/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_xfcd/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_xfcd/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_xfcd/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_xfcd/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_xfcd/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_xfcd/synthetic-monitor/synthetic-monitor.yaml diff --git a/BMW-Dynatrace-config/CD_agent-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_agent-service/alerting-profile/alerting-profile.yaml index 4d3c937c..084aa77f 100644 --- a/BMW-Dynatrace-config/CD_agent-service/alerting-profile/alerting-profile.yaml +++ b/BMW-Dynatrace-config/CD_agent-service/alerting-profile/alerting-profile.yaml @@ -1,6 +1,88 @@ -CDagent-service: -- name: CD_agent-service/management-zone/CDagent-service.name +config: +- CDagent-service-PROD: default.json +- CDagent-service-E2E: default.json +- CDagent-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDagent-service-PROD: +- name: CD_agent-service PROD - tag: agent-service - mzId: CD_agent-service/management-zone/CDagent-service.id -config: -- CDagent-service: agent-service.json +- env: PROD +- skipDeployment: "true" +#Configuration +CDagent-service-PROD.EMEA-Prod: +- name: CD_agent-service PROD +- tag: agent-service +- mzId: CD_agent-service/management-zone/CDagent-service.id +- env: PROD +- skipDeployment: "false" +CDagent-service-PROD.NA-Prod: +- name: CD_agent-service PROD +- tag: agent-service +- mzId: CD_agent-service/management-zone/CDagent-service.id +- env: PROD +- skipDeployment: "false" +CDagent-service-PROD.CN-Prod: +- name: CD_agent-service PROD +- tag: agent-service +- mzId: CD_agent-service/management-zone/CDagent-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDagent-service-E2E: +- name: CD_agent-service E2E +- tag: agent-service +- mzId: CD_agent-service/management-zone/CDagent-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDagent-service-E2E.EMEA-Prod: +- name: CD_agent-service E2E +- tag: agent-service +- mzId: CD_agent-service/management-zone/CDagent-service.id +- env: E2E +- skipDeployment: "false" +CDagent-service-E2E.NA-Prod: +- name: CD_agent-service E2E +- tag: agent-service +- mzId: CD_agent-service/management-zone/CDagent-service.id +- env: E2E +- skipDeployment: "false" +CDagent-service-E2E.CN-Prod: +- name: CD_agent-service E2E +- tag: agent-service +- mzId: CD_agent-service/management-zone/CDagent-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDagent-service-INT: +- name: CD_agent-service INT +- tag: agent-service +- mzId: CD_agent-service/management-zone/CDagent-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDagent-service-INT.EMEA-PreProd: +- name: CD_agent-service INT +- tag: agent-service +- mzId: CD_agent-service/management-zone/CDagent-service.id +- env: INT +- skipDeployment: "false" +CDagent-service-INT.NA-PreProd: +- name: CD_agent-service INT +- tag: agent-service +- mzId: CD_agent-service/management-zone/CDagent-service.id +- env: INT +- skipDeployment: "false" +CDagent-service-INT.CN-PreProd: +- name: CD_agent-service INT +- tag: agent-service +- mzId: CD_agent-service/management-zone/CDagent-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_agent-service/alerting-profile/agent-service.json b/BMW-Dynatrace-config/CD_agent-service/alerting-profile/default.json similarity index 66% rename from BMW-Dynatrace-config/CD_agent-service/alerting-profile/agent-service.json rename to BMW-Dynatrace-config/CD_agent-service/alerting-profile/default.json index d10ad44a..681a4c64 100644 --- a/BMW-Dynatrace-config/CD_agent-service/alerting-profile/agent-service.json +++ b/BMW-Dynatrace-config/CD_agent-service/alerting-profile/default.json @@ -8,12 +8,17 @@ "delayInMinutes": 0, "severityLevel": "AVAILABILITY", "tagFilter": { - "includeMode": "INCLUDE_ANY", + "includeMode": "INCLUDE_ALL", "tagFilters": [ { "context": "CONTEXTLESS", "key": "Component", "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" } ] } @@ -22,12 +27,17 @@ "delayInMinutes": 10, "severityLevel": "ERROR", "tagFilter": { - "includeMode": "INCLUDE_ANY", + "includeMode": "INCLUDE_ALL", "tagFilters": [ { "context": "CONTEXTLESS", "key": "Component", "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" } ] } @@ -36,12 +46,17 @@ "delayInMinutes": 30, "severityLevel": "PERFORMANCE", "tagFilter": { - "includeMode": "INCLUDE_ANY", + "includeMode": "INCLUDE_ALL", "tagFilters": [ { "context": "CONTEXTLESS", "key": "Component", "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" } ] } @@ -50,12 +65,17 @@ "delayInMinutes": 30, "severityLevel": "RESOURCE_CONTENTION", "tagFilter": { - "includeMode": "INCLUDE_ANY", + "includeMode": "INCLUDE_ALL", "tagFilters": [ { "context": "CONTEXTLESS", "key": "Component", "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" } ] } @@ -64,26 +84,17 @@ "delayInMinutes": 10, "severityLevel": "CUSTOM_ALERT", "tagFilter": { - "includeMode": "INCLUDE_ANY", + "includeMode": "INCLUDE_ALL", "tagFilters": [ { "context": "CONTEXTLESS", "key": "Component", "value": "{{.tag}}" - } - ] - } - }, - { - "delayInMinutes": 0, - "severityLevel": "MONITORING_UNAVAILABLE", - "tagFilter": { - "includeMode": "INCLUDE_ANY", - "tagFilters": [ - { + }, + { "context": "CONTEXTLESS", - "key": "Component", - "value": "{{.tag}}" + "key": "Environment", + "value": "{{.env}}" } ] } diff --git a/BMW-Dynatrace-config/CD_agent-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_agent-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_agent-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_agent-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_agent-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_agent-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_agent-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_agent-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_agent-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_agent-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_agent-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_agent-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_agent-service/dashboard/README.md b/BMW-Dynatrace-config/CD_agent-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_agent-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_agent-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_agent-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..e0836965 --- /dev/null +++ b/BMW-Dynatrace-config/CD_agent-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDagent-service-PROD-E2E: defaultPRODE2E.json +- CDagent-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDagent-service-PROD-E2E: +- name: CD_agent-service PROD +- mzName: CD_agent-service/management-zone/CDagent-service.name +- mzId: CD_agent-service/management-zone/CDagent-service.id +- skipDeployment: "true" +#Configuration +CDagent-service-PROD-E2E.EMEA-Prod: +- name: CD_agent-service PROD +- mzName: CD_agent-service/management-zone/CDagent-service.name +- mzId: CD_agent-service/management-zone/CDagent-service.id +- tag: agent-service +- skipDeployment: "false" +CDagent-service-PROD-E2E.NA-Prod: +- name: CD_agent-service PROD +- mzName: CD_agent-service/management-zone/CDagent-service.name +- mzId: CD_agent-service/management-zone/CDagent-service.id +- tag: agent-service +- skipDeployment: "false" +CDagent-service-PROD-E2E.CN-Prod: +- name: CD_agent-service PROD +- mzName: CD_agent-service/management-zone/CDagent-service.name +- mzId: CD_agent-service/management-zone/CDagent-service.id +- tag: agent-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDagent-service-INT-TEST: +- name: CD_agent-service INT-TEST +- mzName: CD_agent-service/management-zone/CDagent-service.name +- mzId: CD_agent-service/management-zone/CDagent-service.id +- tag: agent-service +- skipDeployment: "true" +#Configuration +CDagent-service-INT-TEST.EMEA-PreProd: +- name: CD_agent-service INT-TEST +- mzName: CD_agent-service/management-zone/CDagent-service.name +- mzId: CD_agent-service/management-zone/CDagent-service.id +- tag: agent-service +- skipDeployment: "false" +CDagent-service-INT-TEST.NA-PreProd: +- name: CD_agent-service INT-TEST +- mzName: CD_agent-service/management-zone/CDagent-service.name +- mzId: CD_agent-service/management-zone/CDagent-service.id +- env: INT +- skipDeployment: "false" +CDagent-service-INT-TEST.CN-PreProd: +- name: CD_agent-service INT-TEST +- mzName: CD_agent-service/management-zone/CDagent-service.name +- mzId: CD_agent-service/management-zone/CDagent-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_agent-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_agent-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_agent-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_agent-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_agent-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_agent-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_agent-service/management-zone/README.md b/BMW-Dynatrace-config/CD_agent-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_agent-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/management-zone/CDclient-vehicle-telemetry-processor.json b/BMW-Dynatrace-config/CD_agent-service/management-zone/default.json similarity index 60% rename from BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/management-zone/CDclient-vehicle-telemetry-processor.json rename to BMW-Dynatrace-config/CD_agent-service/management-zone/default.json index b2a9367b..e827aaff 100644 --- a/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/management-zone/CDclient-vehicle-telemetry-processor.json +++ b/BMW-Dynatrace-config/CD_agent-service/management-zone/default.json @@ -18,42 +18,6 @@ "key": { "attribute": "SERVICE_TAGS" } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "HealthResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PingResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PrometheusResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } } ], "enabled": true, @@ -86,6 +50,27 @@ "PROCESS_GROUP_TO_HOST" ], "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" } ] } \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_agent-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_agent-service/management-zone/management-zone.yaml index bf027b5b..e35c4b5d 100644 --- a/BMW-Dynatrace-config/CD_agent-service/management-zone/management-zone.yaml +++ b/BMW-Dynatrace-config/CD_agent-service/management-zone/management-zone.yaml @@ -1,20 +1,6 @@ -CDagent-service.CN-PreProd: -- name: CD_agent-service -- tag: agent-service -CDagent-service.CN-Prod: -- name: CD_agent-service -- tag: agent-service -CDagent-service.EMEA-PreProd: -- name: CD_agent-service -- tag: agent-service -CDagent-service.EMEA-Prod: -- name: CD_agent-service -- tag: agent-service -CDagent-service.NA-PreProd: -- name: CD_agent-service -- tag: agent-service -CDagent-service.NA-Prod: -- name: CD_agent-service -- tag: agent-service config: -- CDagent-service: CDagent-service.json +- CDagent-service: default.json + +CDagent-service: +- name: CD_agent-service +- tag: agent-service diff --git a/BMW-Dynatrace-config/CD_agent-service/notification/README.md b/BMW-Dynatrace-config/CD_agent-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_agent-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_agent-service/notification/email.json b/BMW-Dynatrace-config/CD_agent-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_agent-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_agent-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_agent-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_agent-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_agent-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_agent-service/notification/notification.yaml new file mode 100644 index 00000000..974cb557 --- /dev/null +++ b/BMW-Dynatrace-config/CD_agent-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDagent-service-PROD: msTeams.json +- CDagent-service-E2E: msTeams.json +- CDagent-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDagent-service-PROD: +- name: CD_agent-service PROD +- alertingProfile: CD_agent-service/alerting-profile/CDagent-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDagent-service-PROD.EMEA-Prod: +- name: CD_agent-service PROD +- alertingProfile: CD_agent-service/alerting-profile/CDagent-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDagent-service-PROD.NA-Prod: +- name: CD_agent-service PROD +- alertingProfile: CD_agent-service/alerting-profile/CDagent-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDagent-service-PROD.CN-Prod: +- name: CD_agent-service PROD +- alertingProfile: CD_agent-service/alerting-profile/CDagent-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDagent-service-E2E: +- name: CD_agent-service E2E +- alertingProfile: CD_agent-service/alerting-profile/CDagent-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDagent-service-E2E.EMEA-Prod: +- name: CD_agent-service E2E +- alertingProfile: CD_agent-service/alerting-profile/CDagent-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDagent-service-E2E.NA-Prod: +- name: CD_agent-service E2E +- alertingProfile: CD_agent-service/alerting-profile/CDagent-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDagent-service-E2E.CN-Prod: +- name: CD_agent-service E2E +- alertingProfile: CD_agent-service/alerting-profile/CDagent-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDagent-service-INT: +- name: CD_agent-service INT +- alertingProfile: CD_agent-service/alerting-profile/CDagent-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDagent-service-INT.EMEA-PreProd: +- name: CD_agent-service INT +- alertingProfile: CD_agent-service/alerting-profile/CDagent-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDagent-service-INT.NA-PreProd: +- name: CD_agent-service INT +- alertingProfile: CD_agent-service/alerting-profile/CDagent-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDagent-service-INT.CN-PreProd: +- name: CD_agent-service INT +- alertingProfile: CD_agent-service/alerting-profile/CDagent-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_agent-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_agent-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_agent-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_agent-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_agent-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_agent-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_agent-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_agent-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..e777f370 --- /dev/null +++ b/BMW-Dynatrace-config/CD_agent-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- agent-service: default.json + +agent-service: +- name: CD_agent-service - +- mzName: CD_agent-service/management-zone/CDagent-service.name +- mzId: CD_agent-service/management-zone/CDagent-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_aluis/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_aluis/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..51cf6d98 --- /dev/null +++ b/BMW-Dynatrace-config/CD_aluis/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDaluis-PROD: default.json +- CDaluis-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDaluis-PROD: +- name: CD_aluis PROD +- tag: aluis +- mzId: CD_aluis/management-zone/CDaluis.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDaluis-PROD.EMEA-Prod: +- name: CD_aluis PROD +- tag: aluis +- mzId: CD_aluis/management-zone/CDaluis.id +- env: PROD +- skipDeployment: "false" +CDaluis-PROD.NA-Prod: +- name: CD_aluis PROD +- tag: aluis +- mzId: CD_aluis/management-zone/CDaluis.id +- env: PROD +- skipDeployment: "false" +CDaluis-PROD.CN-Prod: +- name: CD_aluis PROD +- tag: aluis +- mzId: CD_aluis/management-zone/CDaluis.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDaluis-INT: +- name: CD_aluis INT +- tag: aluis +- mzId: CD_aluis/management-zone/CDaluis.id +- env: INT +- skipDeployment: "true" +#Configuration +CDaluis-INT.EMEA-PreProd: +- name: CD_aluis INT +- tag: aluis +- mzId: CD_aluis/management-zone/CDaluis.id +- env: INT +- skipDeployment: "false" +CDaluis-INT.NA-PreProd: +- name: CD_aluis INT +- tag: aluis +- mzId: CD_aluis/management-zone/CDaluis.id +- env: INT +- skipDeployment: "false" +CDaluis-INT.CN-PreProd: +- name: CD_aluis INT +- tag: aluis +- mzId: CD_aluis/management-zone/CDaluis.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/alerting-profile/client-vehicle-telemetry-processor.json b/BMW-Dynatrace-config/CD_aluis/alerting-profile/default.json similarity index 66% rename from BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/alerting-profile/client-vehicle-telemetry-processor.json rename to BMW-Dynatrace-config/CD_aluis/alerting-profile/default.json index d10ad44a..681a4c64 100644 --- a/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/alerting-profile/client-vehicle-telemetry-processor.json +++ b/BMW-Dynatrace-config/CD_aluis/alerting-profile/default.json @@ -8,12 +8,17 @@ "delayInMinutes": 0, "severityLevel": "AVAILABILITY", "tagFilter": { - "includeMode": "INCLUDE_ANY", + "includeMode": "INCLUDE_ALL", "tagFilters": [ { "context": "CONTEXTLESS", "key": "Component", "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" } ] } @@ -22,12 +27,17 @@ "delayInMinutes": 10, "severityLevel": "ERROR", "tagFilter": { - "includeMode": "INCLUDE_ANY", + "includeMode": "INCLUDE_ALL", "tagFilters": [ { "context": "CONTEXTLESS", "key": "Component", "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" } ] } @@ -36,12 +46,17 @@ "delayInMinutes": 30, "severityLevel": "PERFORMANCE", "tagFilter": { - "includeMode": "INCLUDE_ANY", + "includeMode": "INCLUDE_ALL", "tagFilters": [ { "context": "CONTEXTLESS", "key": "Component", "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" } ] } @@ -50,12 +65,17 @@ "delayInMinutes": 30, "severityLevel": "RESOURCE_CONTENTION", "tagFilter": { - "includeMode": "INCLUDE_ANY", + "includeMode": "INCLUDE_ALL", "tagFilters": [ { "context": "CONTEXTLESS", "key": "Component", "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" } ] } @@ -64,26 +84,17 @@ "delayInMinutes": 10, "severityLevel": "CUSTOM_ALERT", "tagFilter": { - "includeMode": "INCLUDE_ANY", + "includeMode": "INCLUDE_ALL", "tagFilters": [ { "context": "CONTEXTLESS", "key": "Component", "value": "{{.tag}}" - } - ] - } - }, - { - "delayInMinutes": 0, - "severityLevel": "MONITORING_UNAVAILABLE", - "tagFilter": { - "includeMode": "INCLUDE_ANY", - "tagFilters": [ - { + }, + { "context": "CONTEXTLESS", - "key": "Component", - "value": "{{.tag}}" + "key": "Environment", + "value": "{{.env}}" } ] } diff --git a/BMW-Dynatrace-config/CD_aluis/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_aluis/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_aluis/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_aluis/custom-service-java/README.md b/BMW-Dynatrace-config/CD_aluis/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_aluis/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_aluis/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_aluis/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_aluis/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_aluis/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_aluis/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_aluis/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_aluis/dashboard/README.md b/BMW-Dynatrace-config/CD_aluis/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_aluis/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_aluis/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_aluis/dashboard/dashboard.yaml new file mode 100644 index 00000000..485bd163 --- /dev/null +++ b/BMW-Dynatrace-config/CD_aluis/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDaluis-PROD-E2E: defaultPRODE2E.json +- CDaluis-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDaluis-PROD-E2E: +- name: CD_aluis PROD-E2E +- mzName: CD_aluis/management-zone/CDaluis.name +- mzId: CD_aluis/management-zone/CDaluis.id +- skipDeployment: "true" +#Configuration +CDaluis-PROD-E2E.EMEA-Prod: +- name: CD_aluis PROD-E2E +- mzName: CD_aluis/management-zone/CDaluis.name +- mzId: CD_aluis/management-zone/CDaluis.id +- tag: aluis +- skipDeployment: "false" +CDaluis-PROD-E2E.NA-Prod: +- name: CD_aluis PROD-E2E +- mzName: CD_aluis/management-zone/CDaluis.name +- mzId: CD_aluis/management-zone/CDaluis.id +- tag: aluis +- skipDeployment: "false" +CDaluis-PROD-E2E.CN-Prod: +- name: CD_aluis PROD-E2E +- mzName: CD_aluis/management-zone/CDaluis.name +- mzId: CD_aluis/management-zone/CDaluis.id +- tag: aluis +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDaluis-INT-TEST: +- name: CD_aluis INT-TEST +- mzName: CD_aluis/management-zone/CDaluis.name +- mzId: CD_aluis/management-zone/CDaluis.id +- tag: aluis +- skipDeployment: "true" +#Configuration +CDaluis-INT-TEST.EMEA-PreProd: +- name: CD_aluis INT-TEST +- mzName: CD_aluis/management-zone/CDaluis.name +- mzId: CD_aluis/management-zone/CDaluis.id +- tag: aluis +- skipDeployment: "false" +CDaluis-INT-TEST.NA-PreProd: +- name: CD_aluis INT-TEST +- mzName: CD_aluis/management-zone/CDaluis.name +- mzId: CD_aluis/management-zone/CDaluis.id +- env: INT +- skipDeployment: "false" +CDaluis-INT-TEST.CN-PreProd: +- name: CD_aluis INT-TEST +- mzName: CD_aluis/management-zone/CDaluis.name +- mzId: CD_aluis/management-zone/CDaluis.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_aluis/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_aluis/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_aluis/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_aluis/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_aluis/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_aluis/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_aluis/management-zone/README.md b/BMW-Dynatrace-config/CD_aluis/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_aluis/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_agent-service/management-zone/CDagent-service.json b/BMW-Dynatrace-config/CD_aluis/management-zone/default.json similarity index 60% rename from BMW-Dynatrace-config/CD_agent-service/management-zone/CDagent-service.json rename to BMW-Dynatrace-config/CD_aluis/management-zone/default.json index b2a9367b..e827aaff 100644 --- a/BMW-Dynatrace-config/CD_agent-service/management-zone/CDagent-service.json +++ b/BMW-Dynatrace-config/CD_aluis/management-zone/default.json @@ -18,42 +18,6 @@ "key": { "attribute": "SERVICE_TAGS" } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "HealthResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PingResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PrometheusResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } } ], "enabled": true, @@ -86,6 +50,27 @@ "PROCESS_GROUP_TO_HOST" ], "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" } ] } \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_aluis/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_aluis/management-zone/management-zone.yaml new file mode 100644 index 00000000..5e30b5b2 --- /dev/null +++ b/BMW-Dynatrace-config/CD_aluis/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDaluis: default.json + +CDaluis: +- name: CD_aluis +- tag: aluis diff --git a/BMW-Dynatrace-config/CD_aluis/notification/README.md b/BMW-Dynatrace-config/CD_aluis/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_aluis/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_aluis/notification/email.json b/BMW-Dynatrace-config/CD_aluis/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_aluis/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_aluis/notification/msTeams.json b/BMW-Dynatrace-config/CD_aluis/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_aluis/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_aluis/notification/notification.yaml b/BMW-Dynatrace-config/CD_aluis/notification/notification.yaml new file mode 100644 index 00000000..1c10a43a --- /dev/null +++ b/BMW-Dynatrace-config/CD_aluis/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDaluis-PROD: msTeams.json +- CDaluis-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDaluis-PROD: +- name: CD_aluis PROD +- alertingProfile: CD_aluis/alerting-profile/CDaluis-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDaluis-PROD.EMEA-Prod: +- name: CD_aluis PROD +- alertingProfile: CD_aluis/alerting-profile/CDaluis-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDaluis-PROD.NA-Prod: +- name: CD_aluis PROD +- alertingProfile: CD_aluis/alerting-profile/CDaluis-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDaluis-PROD.CN-Prod: +- name: CD_aluis PROD +- alertingProfile: CD_aluis/alerting-profile/CDaluis-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDaluis-INT: +- name: CD_aluis INT +- alertingProfile: CD_aluis/alerting-profile/CDaluis-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDaluis-INT.EMEA-PreProd: +- name: CD_aluis INT +- alertingProfile: CD_aluis/alerting-profile/CDaluis-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDaluis-INT.NA-PreProd: +- name: CD_aluis INT +- alertingProfile: CD_aluis/alerting-profile/CDaluis-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDaluis-INT.CN-PreProd: +- name: CD_aluis INT +- alertingProfile: CD_aluis/alerting-profile/CDaluis-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_aluis/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_aluis/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_aluis/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_aluis/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_aluis/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_aluis/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_aluis/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_aluis/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..b98a0a93 --- /dev/null +++ b/BMW-Dynatrace-config/CD_aluis/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- aluis: default.json + +aluis: +- name: CD_aluis - +- mzName: CD_aluis/management-zone/CDaluis.name +- mzId: CD_aluis/management-zone/CDaluis.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-casa/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_am-casa/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..40004149 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-casa/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDam-casa-PROD: default.json +- CDam-casa-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-casa-PROD: +- name: CD_am-casa PROD +- tag: am-casa +- mzId: CD_am-casa/management-zone/CDam-casa.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDam-casa-PROD.EMEA-Prod: +- name: CD_am-casa PROD +- tag: am-casa +- mzId: CD_am-casa/management-zone/CDam-casa.id +- env: PROD +- skipDeployment: "false" +CDam-casa-PROD.NA-Prod: +- name: CD_am-casa PROD +- tag: am-casa +- mzId: CD_am-casa/management-zone/CDam-casa.id +- env: PROD +- skipDeployment: "false" +CDam-casa-PROD.CN-Prod: +- name: CD_am-casa PROD +- tag: am-casa +- mzId: CD_am-casa/management-zone/CDam-casa.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-casa-INT: +- name: CD_am-casa INT +- tag: am-casa +- mzId: CD_am-casa/management-zone/CDam-casa.id +- env: INT +- skipDeployment: "true" +#Configuration +CDam-casa-INT.EMEA-PreProd: +- name: CD_am-casa INT +- tag: am-casa +- mzId: CD_am-casa/management-zone/CDam-casa.id +- env: INT +- skipDeployment: "false" +CDam-casa-INT.NA-PreProd: +- name: CD_am-casa INT +- tag: am-casa +- mzId: CD_am-casa/management-zone/CDam-casa.id +- env: INT +- skipDeployment: "false" +CDam-casa-INT.CN-PreProd: +- name: CD_am-casa INT +- tag: am-casa +- mzId: CD_am-casa/management-zone/CDam-casa.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_chargenow-enabler-service/alerting-profile/chargenow-enabler-service.json b/BMW-Dynatrace-config/CD_am-casa/alerting-profile/default.json similarity index 66% rename from BMW-Dynatrace-config/CD_chargenow-enabler-service/alerting-profile/chargenow-enabler-service.json rename to BMW-Dynatrace-config/CD_am-casa/alerting-profile/default.json index d10ad44a..681a4c64 100644 --- a/BMW-Dynatrace-config/CD_chargenow-enabler-service/alerting-profile/chargenow-enabler-service.json +++ b/BMW-Dynatrace-config/CD_am-casa/alerting-profile/default.json @@ -8,12 +8,17 @@ "delayInMinutes": 0, "severityLevel": "AVAILABILITY", "tagFilter": { - "includeMode": "INCLUDE_ANY", + "includeMode": "INCLUDE_ALL", "tagFilters": [ { "context": "CONTEXTLESS", "key": "Component", "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" } ] } @@ -22,12 +27,17 @@ "delayInMinutes": 10, "severityLevel": "ERROR", "tagFilter": { - "includeMode": "INCLUDE_ANY", + "includeMode": "INCLUDE_ALL", "tagFilters": [ { "context": "CONTEXTLESS", "key": "Component", "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" } ] } @@ -36,12 +46,17 @@ "delayInMinutes": 30, "severityLevel": "PERFORMANCE", "tagFilter": { - "includeMode": "INCLUDE_ANY", + "includeMode": "INCLUDE_ALL", "tagFilters": [ { "context": "CONTEXTLESS", "key": "Component", "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" } ] } @@ -50,12 +65,17 @@ "delayInMinutes": 30, "severityLevel": "RESOURCE_CONTENTION", "tagFilter": { - "includeMode": "INCLUDE_ANY", + "includeMode": "INCLUDE_ALL", "tagFilters": [ { "context": "CONTEXTLESS", "key": "Component", "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" } ] } @@ -64,26 +84,17 @@ "delayInMinutes": 10, "severityLevel": "CUSTOM_ALERT", "tagFilter": { - "includeMode": "INCLUDE_ANY", + "includeMode": "INCLUDE_ALL", "tagFilters": [ { "context": "CONTEXTLESS", "key": "Component", "value": "{{.tag}}" - } - ] - } - }, - { - "delayInMinutes": 0, - "severityLevel": "MONITORING_UNAVAILABLE", - "tagFilter": { - "includeMode": "INCLUDE_ANY", - "tagFilters": [ - { + }, + { "context": "CONTEXTLESS", - "key": "Component", - "value": "{{.tag}}" + "key": "Environment", + "value": "{{.env}}" } ] } diff --git a/BMW-Dynatrace-config/CD_am-casa/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_am-casa/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-casa/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-casa/custom-service-java/README.md b/BMW-Dynatrace-config/CD_am-casa/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-casa/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-casa/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_am-casa/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-casa/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-casa/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_am-casa/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-casa/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-casa/dashboard/README.md b/BMW-Dynatrace-config/CD_am-casa/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-casa/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-casa/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_am-casa/dashboard/dashboard.yaml new file mode 100644 index 00000000..0294d31b --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-casa/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDam-casa-PROD-E2E: defaultPRODE2E.json +- CDam-casa-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDam-casa-PROD-E2E: +- name: CD_am-casa PROD-E2E +- mzName: CD_am-casa/management-zone/CDam-casa.name +- mzId: CD_am-casa/management-zone/CDam-casa.id +- skipDeployment: "true" +#Configuration +CDam-casa-PROD-E2E.EMEA-Prod: +- name: CD_am-casa PROD-E2E +- mzName: CD_am-casa/management-zone/CDam-casa.name +- mzId: CD_am-casa/management-zone/CDam-casa.id +- tag: am-casa +- skipDeployment: "false" +CDam-casa-PROD-E2E.NA-Prod: +- name: CD_am-casa PROD-E2E +- mzName: CD_am-casa/management-zone/CDam-casa.name +- mzId: CD_am-casa/management-zone/CDam-casa.id +- tag: am-casa +- skipDeployment: "false" +CDam-casa-PROD-E2E.CN-Prod: +- name: CD_am-casa PROD-E2E +- mzName: CD_am-casa/management-zone/CDam-casa.name +- mzId: CD_am-casa/management-zone/CDam-casa.id +- tag: am-casa +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDam-casa-INT-TEST: +- name: CD_am-casa INT-TEST +- mzName: CD_am-casa/management-zone/CDam-casa.name +- mzId: CD_am-casa/management-zone/CDam-casa.id +- tag: am-casa +- skipDeployment: "true" +#Configuration +CDam-casa-INT-TEST.EMEA-PreProd: +- name: CD_am-casa INT-TEST +- mzName: CD_am-casa/management-zone/CDam-casa.name +- mzId: CD_am-casa/management-zone/CDam-casa.id +- tag: am-casa +- skipDeployment: "false" +CDam-casa-INT-TEST.NA-PreProd: +- name: CD_am-casa INT-TEST +- mzName: CD_am-casa/management-zone/CDam-casa.name +- mzId: CD_am-casa/management-zone/CDam-casa.id +- env: INT +- skipDeployment: "false" +CDam-casa-INT-TEST.CN-PreProd: +- name: CD_am-casa INT-TEST +- mzName: CD_am-casa/management-zone/CDam-casa.name +- mzId: CD_am-casa/management-zone/CDam-casa.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-casa/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_am-casa/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-casa/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-casa/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_am-casa/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-casa/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-casa/management-zone/README.md b/BMW-Dynatrace-config/CD_am-casa/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-casa/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_destination-composite-service/management-zone/CDdestination-composite-service.json b/BMW-Dynatrace-config/CD_am-casa/management-zone/default.json similarity index 60% rename from BMW-Dynatrace-config/CD_destination-composite-service/management-zone/CDdestination-composite-service.json rename to BMW-Dynatrace-config/CD_am-casa/management-zone/default.json index b2a9367b..e827aaff 100644 --- a/BMW-Dynatrace-config/CD_destination-composite-service/management-zone/CDdestination-composite-service.json +++ b/BMW-Dynatrace-config/CD_am-casa/management-zone/default.json @@ -18,42 +18,6 @@ "key": { "attribute": "SERVICE_TAGS" } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "HealthResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PingResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PrometheusResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } } ], "enabled": true, @@ -86,6 +50,27 @@ "PROCESS_GROUP_TO_HOST" ], "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" } ] } \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-casa/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_am-casa/management-zone/management-zone.yaml new file mode 100644 index 00000000..39419b58 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-casa/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDam-casa: default.json + +CDam-casa: +- name: CD_am-casa +- tag: am-casa diff --git a/BMW-Dynatrace-config/CD_am-casa/notification/README.md b/BMW-Dynatrace-config/CD_am-casa/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-casa/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-casa/notification/email.json b/BMW-Dynatrace-config/CD_am-casa/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-casa/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-casa/notification/msTeams.json b/BMW-Dynatrace-config/CD_am-casa/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-casa/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-casa/notification/notification.yaml b/BMW-Dynatrace-config/CD_am-casa/notification/notification.yaml new file mode 100644 index 00000000..f3242209 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-casa/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDam-casa-PROD: msTeams.json +- CDam-casa-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-casa-PROD: +- name: CD_am-casa PROD +- alertingProfile: CD_am-casa/alerting-profile/CDam-casa-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDam-casa-PROD.EMEA-Prod: +- name: CD_am-casa PROD +- alertingProfile: CD_am-casa/alerting-profile/CDam-casa-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDam-casa-PROD.NA-Prod: +- name: CD_am-casa PROD +- alertingProfile: CD_am-casa/alerting-profile/CDam-casa-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDam-casa-PROD.CN-Prod: +- name: CD_am-casa PROD +- alertingProfile: CD_am-casa/alerting-profile/CDam-casa-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-casa-INT: +- name: CD_am-casa INT +- alertingProfile: CD_am-casa/alerting-profile/CDam-casa-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDam-casa-INT.EMEA-PreProd: +- name: CD_am-casa INT +- alertingProfile: CD_am-casa/alerting-profile/CDam-casa-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDam-casa-INT.NA-PreProd: +- name: CD_am-casa INT +- alertingProfile: CD_am-casa/alerting-profile/CDam-casa-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDam-casa-INT.CN-PreProd: +- name: CD_am-casa INT +- alertingProfile: CD_am-casa/alerting-profile/CDam-casa-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-casa/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_am-casa/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-casa/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-casa/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_am-casa/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-casa/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-casa/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_am-casa/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..7173871b --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-casa/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- am-casa: default.json + +am-casa: +- name: CD_am-casa - +- mzName: CD_am-casa/management-zone/CDam-casa.name +- mzId: CD_am-casa/management-zone/CDam-casa.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cesim/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_am-cesim/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..40e730d2 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cesim/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDam-cesim-PROD: default.json +- CDam-cesim-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-cesim-PROD: +- name: CD_am-cesim PROD +- tag: am-cesim +- mzId: CD_am-cesim/management-zone/CDam-cesim.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDam-cesim-PROD.EMEA-Prod: +- name: CD_am-cesim PROD +- tag: am-cesim +- mzId: CD_am-cesim/management-zone/CDam-cesim.id +- env: PROD +- skipDeployment: "false" +CDam-cesim-PROD.NA-Prod: +- name: CD_am-cesim PROD +- tag: am-cesim +- mzId: CD_am-cesim/management-zone/CDam-cesim.id +- env: PROD +- skipDeployment: "false" +CDam-cesim-PROD.CN-Prod: +- name: CD_am-cesim PROD +- tag: am-cesim +- mzId: CD_am-cesim/management-zone/CDam-cesim.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-cesim-INT: +- name: CD_am-cesim INT +- tag: am-cesim +- mzId: CD_am-cesim/management-zone/CDam-cesim.id +- env: INT +- skipDeployment: "true" +#Configuration +CDam-cesim-INT.EMEA-PreProd: +- name: CD_am-cesim INT +- tag: am-cesim +- mzId: CD_am-cesim/management-zone/CDam-cesim.id +- env: INT +- skipDeployment: "false" +CDam-cesim-INT.NA-PreProd: +- name: CD_am-cesim INT +- tag: am-cesim +- mzId: CD_am-cesim/management-zone/CDam-cesim.id +- env: INT +- skipDeployment: "false" +CDam-cesim-INT.CN-PreProd: +- name: CD_am-cesim INT +- tag: am-cesim +- mzId: CD_am-cesim/management-zone/CDam-cesim.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_destination-composite-service/alerting-profile/destination-composite-service.json b/BMW-Dynatrace-config/CD_am-cesim/alerting-profile/default.json similarity index 66% rename from BMW-Dynatrace-config/CD_destination-composite-service/alerting-profile/destination-composite-service.json rename to BMW-Dynatrace-config/CD_am-cesim/alerting-profile/default.json index d10ad44a..681a4c64 100644 --- a/BMW-Dynatrace-config/CD_destination-composite-service/alerting-profile/destination-composite-service.json +++ b/BMW-Dynatrace-config/CD_am-cesim/alerting-profile/default.json @@ -8,12 +8,17 @@ "delayInMinutes": 0, "severityLevel": "AVAILABILITY", "tagFilter": { - "includeMode": "INCLUDE_ANY", + "includeMode": "INCLUDE_ALL", "tagFilters": [ { "context": "CONTEXTLESS", "key": "Component", "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" } ] } @@ -22,12 +27,17 @@ "delayInMinutes": 10, "severityLevel": "ERROR", "tagFilter": { - "includeMode": "INCLUDE_ANY", + "includeMode": "INCLUDE_ALL", "tagFilters": [ { "context": "CONTEXTLESS", "key": "Component", "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" } ] } @@ -36,12 +46,17 @@ "delayInMinutes": 30, "severityLevel": "PERFORMANCE", "tagFilter": { - "includeMode": "INCLUDE_ANY", + "includeMode": "INCLUDE_ALL", "tagFilters": [ { "context": "CONTEXTLESS", "key": "Component", "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" } ] } @@ -50,12 +65,17 @@ "delayInMinutes": 30, "severityLevel": "RESOURCE_CONTENTION", "tagFilter": { - "includeMode": "INCLUDE_ANY", + "includeMode": "INCLUDE_ALL", "tagFilters": [ { "context": "CONTEXTLESS", "key": "Component", "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" } ] } @@ -64,26 +84,17 @@ "delayInMinutes": 10, "severityLevel": "CUSTOM_ALERT", "tagFilter": { - "includeMode": "INCLUDE_ANY", + "includeMode": "INCLUDE_ALL", "tagFilters": [ { "context": "CONTEXTLESS", "key": "Component", "value": "{{.tag}}" - } - ] - } - }, - { - "delayInMinutes": 0, - "severityLevel": "MONITORING_UNAVAILABLE", - "tagFilter": { - "includeMode": "INCLUDE_ANY", - "tagFilters": [ - { + }, + { "context": "CONTEXTLESS", - "key": "Component", - "value": "{{.tag}}" + "key": "Environment", + "value": "{{.env}}" } ] } diff --git a/BMW-Dynatrace-config/CD_am-cesim/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_am-cesim/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cesim/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cesim/custom-service-java/README.md b/BMW-Dynatrace-config/CD_am-cesim/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cesim/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cesim/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_am-cesim/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cesim/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cesim/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_am-cesim/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cesim/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cesim/dashboard/README.md b/BMW-Dynatrace-config/CD_am-cesim/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cesim/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cesim/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_am-cesim/dashboard/dashboard.yaml new file mode 100644 index 00000000..d3859b8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cesim/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDam-cesim-PROD-E2E: defaultPRODE2E.json +- CDam-cesim-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDam-cesim-PROD-E2E: +- name: CD_am-cesim PROD-E2E +- mzName: CD_am-cesim/management-zone/CDam-cesim.name +- mzId: CD_am-cesim/management-zone/CDam-cesim.id +- skipDeployment: "true" +#Configuration +CDam-cesim-PROD-E2E.EMEA-Prod: +- name: CD_am-cesim PROD-E2E +- mzName: CD_am-cesim/management-zone/CDam-cesim.name +- mzId: CD_am-cesim/management-zone/CDam-cesim.id +- tag: am-cesim +- skipDeployment: "false" +CDam-cesim-PROD-E2E.NA-Prod: +- name: CD_am-cesim PROD-E2E +- mzName: CD_am-cesim/management-zone/CDam-cesim.name +- mzId: CD_am-cesim/management-zone/CDam-cesim.id +- tag: am-cesim +- skipDeployment: "false" +CDam-cesim-PROD-E2E.CN-Prod: +- name: CD_am-cesim PROD-E2E +- mzName: CD_am-cesim/management-zone/CDam-cesim.name +- mzId: CD_am-cesim/management-zone/CDam-cesim.id +- tag: am-cesim +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDam-cesim-INT-TEST: +- name: CD_am-cesim INT-TEST +- mzName: CD_am-cesim/management-zone/CDam-cesim.name +- mzId: CD_am-cesim/management-zone/CDam-cesim.id +- tag: am-cesim +- skipDeployment: "true" +#Configuration +CDam-cesim-INT-TEST.EMEA-PreProd: +- name: CD_am-cesim INT-TEST +- mzName: CD_am-cesim/management-zone/CDam-cesim.name +- mzId: CD_am-cesim/management-zone/CDam-cesim.id +- tag: am-cesim +- skipDeployment: "false" +CDam-cesim-INT-TEST.NA-PreProd: +- name: CD_am-cesim INT-TEST +- mzName: CD_am-cesim/management-zone/CDam-cesim.name +- mzId: CD_am-cesim/management-zone/CDam-cesim.id +- env: INT +- skipDeployment: "false" +CDam-cesim-INT-TEST.CN-PreProd: +- name: CD_am-cesim INT-TEST +- mzName: CD_am-cesim/management-zone/CDam-cesim.name +- mzId: CD_am-cesim/management-zone/CDam-cesim.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cesim/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_am-cesim/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cesim/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cesim/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_am-cesim/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cesim/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cesim/management-zone/README.md b/BMW-Dynatrace-config/CD_am-cesim/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cesim/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_chargenow-enabler-service/management-zone/CDchargenow-enabler-service.json b/BMW-Dynatrace-config/CD_am-cesim/management-zone/default.json similarity index 60% rename from BMW-Dynatrace-config/CD_chargenow-enabler-service/management-zone/CDchargenow-enabler-service.json rename to BMW-Dynatrace-config/CD_am-cesim/management-zone/default.json index b2a9367b..e827aaff 100644 --- a/BMW-Dynatrace-config/CD_chargenow-enabler-service/management-zone/CDchargenow-enabler-service.json +++ b/BMW-Dynatrace-config/CD_am-cesim/management-zone/default.json @@ -18,42 +18,6 @@ "key": { "attribute": "SERVICE_TAGS" } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "HealthResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PingResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PrometheusResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } } ], "enabled": true, @@ -86,6 +50,27 @@ "PROCESS_GROUP_TO_HOST" ], "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" } ] } \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cesim/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_am-cesim/management-zone/management-zone.yaml new file mode 100644 index 00000000..77adf12d --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cesim/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDam-cesim: default.json + +CDam-cesim: +- name: CD_am-cesim +- tag: am-cesim diff --git a/BMW-Dynatrace-config/CD_am-cesim/notification/README.md b/BMW-Dynatrace-config/CD_am-cesim/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cesim/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cesim/notification/email.json b/BMW-Dynatrace-config/CD_am-cesim/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cesim/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cesim/notification/msTeams.json b/BMW-Dynatrace-config/CD_am-cesim/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cesim/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cesim/notification/notification.yaml b/BMW-Dynatrace-config/CD_am-cesim/notification/notification.yaml new file mode 100644 index 00000000..2816c6bb --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cesim/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDam-cesim-PROD: msTeams.json +- CDam-cesim-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-cesim-PROD: +- name: CD_am-cesim PROD +- alertingProfile: CD_am-cesim/alerting-profile/CDam-cesim-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDam-cesim-PROD.EMEA-Prod: +- name: CD_am-cesim PROD +- alertingProfile: CD_am-cesim/alerting-profile/CDam-cesim-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDam-cesim-PROD.NA-Prod: +- name: CD_am-cesim PROD +- alertingProfile: CD_am-cesim/alerting-profile/CDam-cesim-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDam-cesim-PROD.CN-Prod: +- name: CD_am-cesim PROD +- alertingProfile: CD_am-cesim/alerting-profile/CDam-cesim-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-cesim-INT: +- name: CD_am-cesim INT +- alertingProfile: CD_am-cesim/alerting-profile/CDam-cesim-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDam-cesim-INT.EMEA-PreProd: +- name: CD_am-cesim INT +- alertingProfile: CD_am-cesim/alerting-profile/CDam-cesim-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDam-cesim-INT.NA-PreProd: +- name: CD_am-cesim INT +- alertingProfile: CD_am-cesim/alerting-profile/CDam-cesim-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDam-cesim-INT.CN-PreProd: +- name: CD_am-cesim INT +- alertingProfile: CD_am-cesim/alerting-profile/CDam-cesim-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cesim/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_am-cesim/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cesim/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cesim/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_am-cesim/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cesim/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cesim/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_am-cesim/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..ed197832 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cesim/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- am-cesim: default.json + +am-cesim: +- name: CD_am-cesim - +- mzName: CD_am-cesim/management-zone/CDam-cesim.name +- mzId: CD_am-cesim/management-zone/CDam-cesim.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cns/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_am-cns/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..a1578162 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cns/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDam-cns-PROD: default.json +- CDam-cns-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-cns-PROD: +- name: CD_am-cns PROD +- tag: am-cns +- mzId: CD_am-cns/management-zone/CDam-cns.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDam-cns-PROD.EMEA-Prod: +- name: CD_am-cns PROD +- tag: am-cns +- mzId: CD_am-cns/management-zone/CDam-cns.id +- env: PROD +- skipDeployment: "false" +CDam-cns-PROD.NA-Prod: +- name: CD_am-cns PROD +- tag: am-cns +- mzId: CD_am-cns/management-zone/CDam-cns.id +- env: PROD +- skipDeployment: "false" +CDam-cns-PROD.CN-Prod: +- name: CD_am-cns PROD +- tag: am-cns +- mzId: CD_am-cns/management-zone/CDam-cns.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-cns-INT: +- name: CD_am-cns INT +- tag: am-cns +- mzId: CD_am-cns/management-zone/CDam-cns.id +- env: INT +- skipDeployment: "true" +#Configuration +CDam-cns-INT.EMEA-PreProd: +- name: CD_am-cns INT +- tag: am-cns +- mzId: CD_am-cns/management-zone/CDam-cns.id +- env: INT +- skipDeployment: "false" +CDam-cns-INT.NA-PreProd: +- name: CD_am-cns INT +- tag: am-cns +- mzId: CD_am-cns/management-zone/CDam-cns.id +- env: INT +- skipDeployment: "false" +CDam-cns-INT.CN-PreProd: +- name: CD_am-cns INT +- tag: am-cns +- mzId: CD_am-cns/management-zone/CDam-cns.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cns/alerting-profile/default.json b/BMW-Dynatrace-config/CD_am-cns/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cns/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cns/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_am-cns/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cns/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cns/custom-service-java/README.md b/BMW-Dynatrace-config/CD_am-cns/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cns/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cns/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_am-cns/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cns/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cns/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_am-cns/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cns/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cns/dashboard/README.md b/BMW-Dynatrace-config/CD_am-cns/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cns/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cns/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_am-cns/dashboard/dashboard.yaml new file mode 100644 index 00000000..3d53aca7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cns/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDam-cns-PROD-E2E: defaultPRODE2E.json +- CDam-cns-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDam-cns-PROD-E2E: +- name: CD_am-cns PROD-E2E +- mzName: CD_am-cns/management-zone/CDam-cns.name +- mzId: CD_am-cns/management-zone/CDam-cns.id +- skipDeployment: "true" +#Configuration +CDam-cns-PROD-E2E.EMEA-Prod: +- name: CD_am-cns PROD-E2E +- mzName: CD_am-cns/management-zone/CDam-cns.name +- mzId: CD_am-cns/management-zone/CDam-cns.id +- tag: am-cns +- skipDeployment: "false" +CDam-cns-PROD-E2E.NA-Prod: +- name: CD_am-cns PROD-E2E +- mzName: CD_am-cns/management-zone/CDam-cns.name +- mzId: CD_am-cns/management-zone/CDam-cns.id +- tag: am-cns +- skipDeployment: "false" +CDam-cns-PROD-E2E.CN-Prod: +- name: CD_am-cns PROD-E2E +- mzName: CD_am-cns/management-zone/CDam-cns.name +- mzId: CD_am-cns/management-zone/CDam-cns.id +- tag: am-cns +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDam-cns-INT-TEST: +- name: CD_am-cns INT-TEST +- mzName: CD_am-cns/management-zone/CDam-cns.name +- mzId: CD_am-cns/management-zone/CDam-cns.id +- tag: am-cns +- skipDeployment: "true" +#Configuration +CDam-cns-INT-TEST.EMEA-PreProd: +- name: CD_am-cns INT-TEST +- mzName: CD_am-cns/management-zone/CDam-cns.name +- mzId: CD_am-cns/management-zone/CDam-cns.id +- tag: am-cns +- skipDeployment: "false" +CDam-cns-INT-TEST.NA-PreProd: +- name: CD_am-cns INT-TEST +- mzName: CD_am-cns/management-zone/CDam-cns.name +- mzId: CD_am-cns/management-zone/CDam-cns.id +- env: INT +- skipDeployment: "false" +CDam-cns-INT-TEST.CN-PreProd: +- name: CD_am-cns INT-TEST +- mzName: CD_am-cns/management-zone/CDam-cns.name +- mzId: CD_am-cns/management-zone/CDam-cns.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cns/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_am-cns/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cns/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cns/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_am-cns/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cns/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cns/management-zone/README.md b/BMW-Dynatrace-config/CD_am-cns/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cns/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_am-cns/management-zone/default.json b/BMW-Dynatrace-config/CD_am-cns/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cns/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cns/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_am-cns/management-zone/management-zone.yaml new file mode 100644 index 00000000..9427b257 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cns/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDam-cns: default.json + +CDam-cns: +- name: CD_am-cns +- tag: am-cns diff --git a/BMW-Dynatrace-config/CD_am-cns/notification/README.md b/BMW-Dynatrace-config/CD_am-cns/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cns/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cns/notification/email.json b/BMW-Dynatrace-config/CD_am-cns/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cns/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cns/notification/msTeams.json b/BMW-Dynatrace-config/CD_am-cns/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cns/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cns/notification/notification.yaml b/BMW-Dynatrace-config/CD_am-cns/notification/notification.yaml new file mode 100644 index 00000000..12815dad --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cns/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDam-cns-PROD: msTeams.json +- CDam-cns-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-cns-PROD: +- name: CD_am-cns PROD +- alertingProfile: CD_am-cns/alerting-profile/CDam-cns-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDam-cns-PROD.EMEA-Prod: +- name: CD_am-cns PROD +- alertingProfile: CD_am-cns/alerting-profile/CDam-cns-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDam-cns-PROD.NA-Prod: +- name: CD_am-cns PROD +- alertingProfile: CD_am-cns/alerting-profile/CDam-cns-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDam-cns-PROD.CN-Prod: +- name: CD_am-cns PROD +- alertingProfile: CD_am-cns/alerting-profile/CDam-cns-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-cns-INT: +- name: CD_am-cns INT +- alertingProfile: CD_am-cns/alerting-profile/CDam-cns-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDam-cns-INT.EMEA-PreProd: +- name: CD_am-cns INT +- alertingProfile: CD_am-cns/alerting-profile/CDam-cns-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDam-cns-INT.NA-PreProd: +- name: CD_am-cns INT +- alertingProfile: CD_am-cns/alerting-profile/CDam-cns-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDam-cns-INT.CN-PreProd: +- name: CD_am-cns INT +- alertingProfile: CD_am-cns/alerting-profile/CDam-cns-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cns/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_am-cns/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cns/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cns/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_am-cns/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cns/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cns/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_am-cns/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..1fd23dd9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cns/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- am-cns: default.json + +am-cns: +- name: CD_am-cns - +- mzName: CD_am-cns/management-zone/CDam-cns.name +- mzId: CD_am-cns/management-zone/CDam-cns.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-device/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_am-device/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..fea1f762 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-device/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDam-device-PROD: default.json +- CDam-device-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-device-PROD: +- name: CD_am-device PROD +- tag: am-device +- mzId: CD_am-device/management-zone/CDam-device.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDam-device-PROD.EMEA-Prod: +- name: CD_am-device PROD +- tag: am-device +- mzId: CD_am-device/management-zone/CDam-device.id +- env: PROD +- skipDeployment: "false" +CDam-device-PROD.NA-Prod: +- name: CD_am-device PROD +- tag: am-device +- mzId: CD_am-device/management-zone/CDam-device.id +- env: PROD +- skipDeployment: "false" +CDam-device-PROD.CN-Prod: +- name: CD_am-device PROD +- tag: am-device +- mzId: CD_am-device/management-zone/CDam-device.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-device-INT: +- name: CD_am-device INT +- tag: am-device +- mzId: CD_am-device/management-zone/CDam-device.id +- env: INT +- skipDeployment: "true" +#Configuration +CDam-device-INT.EMEA-PreProd: +- name: CD_am-device INT +- tag: am-device +- mzId: CD_am-device/management-zone/CDam-device.id +- env: INT +- skipDeployment: "false" +CDam-device-INT.NA-PreProd: +- name: CD_am-device INT +- tag: am-device +- mzId: CD_am-device/management-zone/CDam-device.id +- env: INT +- skipDeployment: "false" +CDam-device-INT.CN-PreProd: +- name: CD_am-device INT +- tag: am-device +- mzId: CD_am-device/management-zone/CDam-device.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-device/alerting-profile/default.json b/BMW-Dynatrace-config/CD_am-device/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-device/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-device/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_am-device/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-device/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-device/custom-service-java/README.md b/BMW-Dynatrace-config/CD_am-device/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-device/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-device/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_am-device/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-device/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-device/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_am-device/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-device/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-device/dashboard/README.md b/BMW-Dynatrace-config/CD_am-device/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-device/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-device/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_am-device/dashboard/dashboard.yaml new file mode 100644 index 00000000..f4d79672 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-device/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDam-device-PROD-E2E: defaultPRODE2E.json +- CDam-device-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDam-device-PROD-E2E: +- name: CD_am-device PROD-E2E +- mzName: CD_am-device/management-zone/CDam-device.name +- mzId: CD_am-device/management-zone/CDam-device.id +- skipDeployment: "true" +#Configuration +CDam-device-PROD-E2E.EMEA-Prod: +- name: CD_am-device PROD-E2E +- mzName: CD_am-device/management-zone/CDam-device.name +- mzId: CD_am-device/management-zone/CDam-device.id +- tag: am-device +- skipDeployment: "false" +CDam-device-PROD-E2E.NA-Prod: +- name: CD_am-device PROD-E2E +- mzName: CD_am-device/management-zone/CDam-device.name +- mzId: CD_am-device/management-zone/CDam-device.id +- tag: am-device +- skipDeployment: "false" +CDam-device-PROD-E2E.CN-Prod: +- name: CD_am-device PROD-E2E +- mzName: CD_am-device/management-zone/CDam-device.name +- mzId: CD_am-device/management-zone/CDam-device.id +- tag: am-device +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDam-device-INT-TEST: +- name: CD_am-device INT-TEST +- mzName: CD_am-device/management-zone/CDam-device.name +- mzId: CD_am-device/management-zone/CDam-device.id +- tag: am-device +- skipDeployment: "true" +#Configuration +CDam-device-INT-TEST.EMEA-PreProd: +- name: CD_am-device INT-TEST +- mzName: CD_am-device/management-zone/CDam-device.name +- mzId: CD_am-device/management-zone/CDam-device.id +- tag: am-device +- skipDeployment: "false" +CDam-device-INT-TEST.NA-PreProd: +- name: CD_am-device INT-TEST +- mzName: CD_am-device/management-zone/CDam-device.name +- mzId: CD_am-device/management-zone/CDam-device.id +- env: INT +- skipDeployment: "false" +CDam-device-INT-TEST.CN-PreProd: +- name: CD_am-device INT-TEST +- mzName: CD_am-device/management-zone/CDam-device.name +- mzId: CD_am-device/management-zone/CDam-device.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-device/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_am-device/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-device/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-device/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_am-device/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-device/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-device/management-zone/README.md b/BMW-Dynatrace-config/CD_am-device/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-device/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_am-device/management-zone/default.json b/BMW-Dynatrace-config/CD_am-device/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-device/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-device/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_am-device/management-zone/management-zone.yaml new file mode 100644 index 00000000..de43d813 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-device/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDam-device: default.json + +CDam-device: +- name: CD_am-device +- tag: am-device diff --git a/BMW-Dynatrace-config/CD_am-device/notification/README.md b/BMW-Dynatrace-config/CD_am-device/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-device/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-device/notification/email.json b/BMW-Dynatrace-config/CD_am-device/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-device/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-device/notification/msTeams.json b/BMW-Dynatrace-config/CD_am-device/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-device/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-device/notification/notification.yaml b/BMW-Dynatrace-config/CD_am-device/notification/notification.yaml new file mode 100644 index 00000000..fc377ed0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-device/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDam-device-PROD: msTeams.json +- CDam-device-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-device-PROD: +- name: CD_am-device PROD +- alertingProfile: CD_am-device/alerting-profile/CDam-device-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDam-device-PROD.EMEA-Prod: +- name: CD_am-device PROD +- alertingProfile: CD_am-device/alerting-profile/CDam-device-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDam-device-PROD.NA-Prod: +- name: CD_am-device PROD +- alertingProfile: CD_am-device/alerting-profile/CDam-device-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDam-device-PROD.CN-Prod: +- name: CD_am-device PROD +- alertingProfile: CD_am-device/alerting-profile/CDam-device-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-device-INT: +- name: CD_am-device INT +- alertingProfile: CD_am-device/alerting-profile/CDam-device-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDam-device-INT.EMEA-PreProd: +- name: CD_am-device INT +- alertingProfile: CD_am-device/alerting-profile/CDam-device-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDam-device-INT.NA-PreProd: +- name: CD_am-device INT +- alertingProfile: CD_am-device/alerting-profile/CDam-device-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDam-device-INT.CN-PreProd: +- name: CD_am-device INT +- alertingProfile: CD_am-device/alerting-profile/CDam-device-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-device/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_am-device/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-device/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-device/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_am-device/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-device/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-device/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_am-device/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..21821f0e --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-device/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- am-device: default.json + +am-device: +- name: CD_am-device - +- mzName: CD_am-device/management-zone/CDam-device.name +- mzId: CD_am-device/management-zone/CDam-device.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ecs/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_am-ecs/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..9583704b --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ecs/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDam-ecs-PROD: default.json +- CDam-ecs-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-ecs-PROD: +- name: CD_am-ecs PROD +- tag: am-ecs +- mzId: CD_am-ecs/management-zone/CDam-ecs.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDam-ecs-PROD.EMEA-Prod: +- name: CD_am-ecs PROD +- tag: am-ecs +- mzId: CD_am-ecs/management-zone/CDam-ecs.id +- env: PROD +- skipDeployment: "false" +CDam-ecs-PROD.NA-Prod: +- name: CD_am-ecs PROD +- tag: am-ecs +- mzId: CD_am-ecs/management-zone/CDam-ecs.id +- env: PROD +- skipDeployment: "false" +CDam-ecs-PROD.CN-Prod: +- name: CD_am-ecs PROD +- tag: am-ecs +- mzId: CD_am-ecs/management-zone/CDam-ecs.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-ecs-INT: +- name: CD_am-ecs INT +- tag: am-ecs +- mzId: CD_am-ecs/management-zone/CDam-ecs.id +- env: INT +- skipDeployment: "true" +#Configuration +CDam-ecs-INT.EMEA-PreProd: +- name: CD_am-ecs INT +- tag: am-ecs +- mzId: CD_am-ecs/management-zone/CDam-ecs.id +- env: INT +- skipDeployment: "false" +CDam-ecs-INT.NA-PreProd: +- name: CD_am-ecs INT +- tag: am-ecs +- mzId: CD_am-ecs/management-zone/CDam-ecs.id +- env: INT +- skipDeployment: "false" +CDam-ecs-INT.CN-PreProd: +- name: CD_am-ecs INT +- tag: am-ecs +- mzId: CD_am-ecs/management-zone/CDam-ecs.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ecs/alerting-profile/default.json b/BMW-Dynatrace-config/CD_am-ecs/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ecs/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ecs/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_am-ecs/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ecs/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ecs/custom-service-java/README.md b/BMW-Dynatrace-config/CD_am-ecs/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ecs/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ecs/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_am-ecs/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ecs/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ecs/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_am-ecs/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ecs/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ecs/dashboard/README.md b/BMW-Dynatrace-config/CD_am-ecs/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ecs/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ecs/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_am-ecs/dashboard/dashboard.yaml new file mode 100644 index 00000000..d6fbf96b --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ecs/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDam-ecs-PROD-E2E: defaultPRODE2E.json +- CDam-ecs-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDam-ecs-PROD-E2E: +- name: CD_am-ecs PROD-E2E +- mzName: CD_am-ecs/management-zone/CDam-ecs.name +- mzId: CD_am-ecs/management-zone/CDam-ecs.id +- skipDeployment: "true" +#Configuration +CDam-ecs-PROD-E2E.EMEA-Prod: +- name: CD_am-ecs PROD-E2E +- mzName: CD_am-ecs/management-zone/CDam-ecs.name +- mzId: CD_am-ecs/management-zone/CDam-ecs.id +- tag: am-ecs +- skipDeployment: "false" +CDam-ecs-PROD-E2E.NA-Prod: +- name: CD_am-ecs PROD-E2E +- mzName: CD_am-ecs/management-zone/CDam-ecs.name +- mzId: CD_am-ecs/management-zone/CDam-ecs.id +- tag: am-ecs +- skipDeployment: "false" +CDam-ecs-PROD-E2E.CN-Prod: +- name: CD_am-ecs PROD-E2E +- mzName: CD_am-ecs/management-zone/CDam-ecs.name +- mzId: CD_am-ecs/management-zone/CDam-ecs.id +- tag: am-ecs +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDam-ecs-INT-TEST: +- name: CD_am-ecs INT-TEST +- mzName: CD_am-ecs/management-zone/CDam-ecs.name +- mzId: CD_am-ecs/management-zone/CDam-ecs.id +- tag: am-ecs +- skipDeployment: "true" +#Configuration +CDam-ecs-INT-TEST.EMEA-PreProd: +- name: CD_am-ecs INT-TEST +- mzName: CD_am-ecs/management-zone/CDam-ecs.name +- mzId: CD_am-ecs/management-zone/CDam-ecs.id +- tag: am-ecs +- skipDeployment: "false" +CDam-ecs-INT-TEST.NA-PreProd: +- name: CD_am-ecs INT-TEST +- mzName: CD_am-ecs/management-zone/CDam-ecs.name +- mzId: CD_am-ecs/management-zone/CDam-ecs.id +- env: INT +- skipDeployment: "false" +CDam-ecs-INT-TEST.CN-PreProd: +- name: CD_am-ecs INT-TEST +- mzName: CD_am-ecs/management-zone/CDam-ecs.name +- mzId: CD_am-ecs/management-zone/CDam-ecs.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ecs/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_am-ecs/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ecs/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ecs/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_am-ecs/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ecs/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ecs/management-zone/README.md b/BMW-Dynatrace-config/CD_am-ecs/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ecs/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_am-ecs/management-zone/default.json b/BMW-Dynatrace-config/CD_am-ecs/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ecs/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ecs/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_am-ecs/management-zone/management-zone.yaml new file mode 100644 index 00000000..68b97682 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ecs/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDam-ecs: default.json + +CDam-ecs: +- name: CD_am-ecs +- tag: am-ecs diff --git a/BMW-Dynatrace-config/CD_am-ecs/notification/README.md b/BMW-Dynatrace-config/CD_am-ecs/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ecs/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ecs/notification/email.json b/BMW-Dynatrace-config/CD_am-ecs/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ecs/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ecs/notification/msTeams.json b/BMW-Dynatrace-config/CD_am-ecs/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ecs/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ecs/notification/notification.yaml b/BMW-Dynatrace-config/CD_am-ecs/notification/notification.yaml new file mode 100644 index 00000000..67da83db --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ecs/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDam-ecs-PROD: msTeams.json +- CDam-ecs-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-ecs-PROD: +- name: CD_am-ecs PROD +- alertingProfile: CD_am-ecs/alerting-profile/CDam-ecs-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDam-ecs-PROD.EMEA-Prod: +- name: CD_am-ecs PROD +- alertingProfile: CD_am-ecs/alerting-profile/CDam-ecs-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDam-ecs-PROD.NA-Prod: +- name: CD_am-ecs PROD +- alertingProfile: CD_am-ecs/alerting-profile/CDam-ecs-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDam-ecs-PROD.CN-Prod: +- name: CD_am-ecs PROD +- alertingProfile: CD_am-ecs/alerting-profile/CDam-ecs-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-ecs-INT: +- name: CD_am-ecs INT +- alertingProfile: CD_am-ecs/alerting-profile/CDam-ecs-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDam-ecs-INT.EMEA-PreProd: +- name: CD_am-ecs INT +- alertingProfile: CD_am-ecs/alerting-profile/CDam-ecs-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDam-ecs-INT.NA-PreProd: +- name: CD_am-ecs INT +- alertingProfile: CD_am-ecs/alerting-profile/CDam-ecs-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDam-ecs-INT.CN-PreProd: +- name: CD_am-ecs INT +- alertingProfile: CD_am-ecs/alerting-profile/CDam-ecs-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ecs/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_am-ecs/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ecs/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ecs/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_am-ecs/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ecs/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ecs/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_am-ecs/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..0b094613 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ecs/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- am-ecs: default.json + +am-ecs: +- name: CD_am-ecs - +- mzName: CD_am-ecs/management-zone/CDam-ecs.name +- mzId: CD_am-ecs/management-zone/CDam-ecs.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-egim/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_am-egim/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..d6ae73c4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-egim/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDam-egim-PROD: default.json +- CDam-egim-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-egim-PROD: +- name: CD_am-egim PROD +- tag: am-egim +- mzId: CD_am-egim/management-zone/CDam-egim.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDam-egim-PROD.EMEA-Prod: +- name: CD_am-egim PROD +- tag: am-egim +- mzId: CD_am-egim/management-zone/CDam-egim.id +- env: PROD +- skipDeployment: "false" +CDam-egim-PROD.NA-Prod: +- name: CD_am-egim PROD +- tag: am-egim +- mzId: CD_am-egim/management-zone/CDam-egim.id +- env: PROD +- skipDeployment: "false" +CDam-egim-PROD.CN-Prod: +- name: CD_am-egim PROD +- tag: am-egim +- mzId: CD_am-egim/management-zone/CDam-egim.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-egim-INT: +- name: CD_am-egim INT +- tag: am-egim +- mzId: CD_am-egim/management-zone/CDam-egim.id +- env: INT +- skipDeployment: "true" +#Configuration +CDam-egim-INT.EMEA-PreProd: +- name: CD_am-egim INT +- tag: am-egim +- mzId: CD_am-egim/management-zone/CDam-egim.id +- env: INT +- skipDeployment: "false" +CDam-egim-INT.NA-PreProd: +- name: CD_am-egim INT +- tag: am-egim +- mzId: CD_am-egim/management-zone/CDam-egim.id +- env: INT +- skipDeployment: "false" +CDam-egim-INT.CN-PreProd: +- name: CD_am-egim INT +- tag: am-egim +- mzId: CD_am-egim/management-zone/CDam-egim.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-egim/alerting-profile/default.json b/BMW-Dynatrace-config/CD_am-egim/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-egim/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-egim/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_am-egim/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-egim/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-egim/custom-service-java/README.md b/BMW-Dynatrace-config/CD_am-egim/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-egim/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-egim/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_am-egim/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-egim/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-egim/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_am-egim/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-egim/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-egim/dashboard/README.md b/BMW-Dynatrace-config/CD_am-egim/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-egim/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-egim/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_am-egim/dashboard/dashboard.yaml new file mode 100644 index 00000000..d8e17270 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-egim/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDam-egim-PROD-E2E: defaultPRODE2E.json +- CDam-egim-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDam-egim-PROD-E2E: +- name: CD_am-egim PROD-E2E +- mzName: CD_am-egim/management-zone/CDam-egim.name +- mzId: CD_am-egim/management-zone/CDam-egim.id +- skipDeployment: "true" +#Configuration +CDam-egim-PROD-E2E.EMEA-Prod: +- name: CD_am-egim PROD-E2E +- mzName: CD_am-egim/management-zone/CDam-egim.name +- mzId: CD_am-egim/management-zone/CDam-egim.id +- tag: am-egim +- skipDeployment: "false" +CDam-egim-PROD-E2E.NA-Prod: +- name: CD_am-egim PROD-E2E +- mzName: CD_am-egim/management-zone/CDam-egim.name +- mzId: CD_am-egim/management-zone/CDam-egim.id +- tag: am-egim +- skipDeployment: "false" +CDam-egim-PROD-E2E.CN-Prod: +- name: CD_am-egim PROD-E2E +- mzName: CD_am-egim/management-zone/CDam-egim.name +- mzId: CD_am-egim/management-zone/CDam-egim.id +- tag: am-egim +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDam-egim-INT-TEST: +- name: CD_am-egim INT-TEST +- mzName: CD_am-egim/management-zone/CDam-egim.name +- mzId: CD_am-egim/management-zone/CDam-egim.id +- tag: am-egim +- skipDeployment: "true" +#Configuration +CDam-egim-INT-TEST.EMEA-PreProd: +- name: CD_am-egim INT-TEST +- mzName: CD_am-egim/management-zone/CDam-egim.name +- mzId: CD_am-egim/management-zone/CDam-egim.id +- tag: am-egim +- skipDeployment: "false" +CDam-egim-INT-TEST.NA-PreProd: +- name: CD_am-egim INT-TEST +- mzName: CD_am-egim/management-zone/CDam-egim.name +- mzId: CD_am-egim/management-zone/CDam-egim.id +- env: INT +- skipDeployment: "false" +CDam-egim-INT-TEST.CN-PreProd: +- name: CD_am-egim INT-TEST +- mzName: CD_am-egim/management-zone/CDam-egim.name +- mzId: CD_am-egim/management-zone/CDam-egim.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-egim/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_am-egim/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-egim/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-egim/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_am-egim/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-egim/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-egim/management-zone/README.md b/BMW-Dynatrace-config/CD_am-egim/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-egim/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_am-egim/management-zone/default.json b/BMW-Dynatrace-config/CD_am-egim/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-egim/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-egim/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_am-egim/management-zone/management-zone.yaml new file mode 100644 index 00000000..e9f45cb9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-egim/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDam-egim: default.json + +CDam-egim: +- name: CD_am-egim +- tag: am-egim diff --git a/BMW-Dynatrace-config/CD_am-egim/notification/README.md b/BMW-Dynatrace-config/CD_am-egim/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-egim/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-egim/notification/email.json b/BMW-Dynatrace-config/CD_am-egim/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-egim/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-egim/notification/msTeams.json b/BMW-Dynatrace-config/CD_am-egim/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-egim/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-egim/notification/notification.yaml b/BMW-Dynatrace-config/CD_am-egim/notification/notification.yaml new file mode 100644 index 00000000..93934ee9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-egim/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDam-egim-PROD: msTeams.json +- CDam-egim-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-egim-PROD: +- name: CD_am-egim PROD +- alertingProfile: CD_am-egim/alerting-profile/CDam-egim-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDam-egim-PROD.EMEA-Prod: +- name: CD_am-egim PROD +- alertingProfile: CD_am-egim/alerting-profile/CDam-egim-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDam-egim-PROD.NA-Prod: +- name: CD_am-egim PROD +- alertingProfile: CD_am-egim/alerting-profile/CDam-egim-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDam-egim-PROD.CN-Prod: +- name: CD_am-egim PROD +- alertingProfile: CD_am-egim/alerting-profile/CDam-egim-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-egim-INT: +- name: CD_am-egim INT +- alertingProfile: CD_am-egim/alerting-profile/CDam-egim-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDam-egim-INT.EMEA-PreProd: +- name: CD_am-egim INT +- alertingProfile: CD_am-egim/alerting-profile/CDam-egim-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDam-egim-INT.NA-PreProd: +- name: CD_am-egim INT +- alertingProfile: CD_am-egim/alerting-profile/CDam-egim-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDam-egim-INT.CN-PreProd: +- name: CD_am-egim INT +- alertingProfile: CD_am-egim/alerting-profile/CDam-egim-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-egim/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_am-egim/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-egim/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-egim/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_am-egim/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-egim/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-egim/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_am-egim/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..c3a0e38d --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-egim/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- am-egim: default.json + +am-egim: +- name: CD_am-egim - +- mzName: CD_am-egim/management-zone/CDam-egim.name +- mzId: CD_am-egim/management-zone/CDam-egim.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-esim-ui/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_am-esim-ui/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..6fca9718 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-esim-ui/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDam-esim-ui-PROD: default.json +- CDam-esim-ui-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-esim-ui-PROD: +- name: CD_am-esim-ui PROD +- tag: am-esim-ui +- mzId: CD_am-esim-ui/management-zone/CDam-esim-ui.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDam-esim-ui-PROD.EMEA-Prod: +- name: CD_am-esim-ui PROD +- tag: am-esim-ui +- mzId: CD_am-esim-ui/management-zone/CDam-esim-ui.id +- env: PROD +- skipDeployment: "false" +CDam-esim-ui-PROD.NA-Prod: +- name: CD_am-esim-ui PROD +- tag: am-esim-ui +- mzId: CD_am-esim-ui/management-zone/CDam-esim-ui.id +- env: PROD +- skipDeployment: "false" +CDam-esim-ui-PROD.CN-Prod: +- name: CD_am-esim-ui PROD +- tag: am-esim-ui +- mzId: CD_am-esim-ui/management-zone/CDam-esim-ui.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-esim-ui-INT: +- name: CD_am-esim-ui INT +- tag: am-esim-ui +- mzId: CD_am-esim-ui/management-zone/CDam-esim-ui.id +- env: INT +- skipDeployment: "true" +#Configuration +CDam-esim-ui-INT.EMEA-PreProd: +- name: CD_am-esim-ui INT +- tag: am-esim-ui +- mzId: CD_am-esim-ui/management-zone/CDam-esim-ui.id +- env: INT +- skipDeployment: "false" +CDam-esim-ui-INT.NA-PreProd: +- name: CD_am-esim-ui INT +- tag: am-esim-ui +- mzId: CD_am-esim-ui/management-zone/CDam-esim-ui.id +- env: INT +- skipDeployment: "false" +CDam-esim-ui-INT.CN-PreProd: +- name: CD_am-esim-ui INT +- tag: am-esim-ui +- mzId: CD_am-esim-ui/management-zone/CDam-esim-ui.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-esim-ui/alerting-profile/default.json b/BMW-Dynatrace-config/CD_am-esim-ui/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-esim-ui/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-esim-ui/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_am-esim-ui/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-esim-ui/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-esim-ui/custom-service-java/README.md b/BMW-Dynatrace-config/CD_am-esim-ui/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-esim-ui/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-esim-ui/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_am-esim-ui/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-esim-ui/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-esim-ui/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_am-esim-ui/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-esim-ui/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-esim-ui/dashboard/README.md b/BMW-Dynatrace-config/CD_am-esim-ui/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-esim-ui/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-esim-ui/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_am-esim-ui/dashboard/dashboard.yaml new file mode 100644 index 00000000..9978c324 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-esim-ui/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDam-esim-ui-PROD-E2E: defaultPRODE2E.json +- CDam-esim-ui-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDam-esim-ui-PROD-E2E: +- name: CD_am-esim-ui PROD-E2E +- mzName: CD_am-esim-ui/management-zone/CDam-esim-ui.name +- mzId: CD_am-esim-ui/management-zone/CDam-esim-ui.id +- skipDeployment: "true" +#Configuration +CDam-esim-ui-PROD-E2E.EMEA-Prod: +- name: CD_am-esim-ui PROD-E2E +- mzName: CD_am-esim-ui/management-zone/CDam-esim-ui.name +- mzId: CD_am-esim-ui/management-zone/CDam-esim-ui.id +- tag: am-esim-ui +- skipDeployment: "false" +CDam-esim-ui-PROD-E2E.NA-Prod: +- name: CD_am-esim-ui PROD-E2E +- mzName: CD_am-esim-ui/management-zone/CDam-esim-ui.name +- mzId: CD_am-esim-ui/management-zone/CDam-esim-ui.id +- tag: am-esim-ui +- skipDeployment: "false" +CDam-esim-ui-PROD-E2E.CN-Prod: +- name: CD_am-esim-ui PROD-E2E +- mzName: CD_am-esim-ui/management-zone/CDam-esim-ui.name +- mzId: CD_am-esim-ui/management-zone/CDam-esim-ui.id +- tag: am-esim-ui +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDam-esim-ui-INT-TEST: +- name: CD_am-esim-ui INT-TEST +- mzName: CD_am-esim-ui/management-zone/CDam-esim-ui.name +- mzId: CD_am-esim-ui/management-zone/CDam-esim-ui.id +- tag: am-esim-ui +- skipDeployment: "true" +#Configuration +CDam-esim-ui-INT-TEST.EMEA-PreProd: +- name: CD_am-esim-ui INT-TEST +- mzName: CD_am-esim-ui/management-zone/CDam-esim-ui.name +- mzId: CD_am-esim-ui/management-zone/CDam-esim-ui.id +- tag: am-esim-ui +- skipDeployment: "false" +CDam-esim-ui-INT-TEST.NA-PreProd: +- name: CD_am-esim-ui INT-TEST +- mzName: CD_am-esim-ui/management-zone/CDam-esim-ui.name +- mzId: CD_am-esim-ui/management-zone/CDam-esim-ui.id +- env: INT +- skipDeployment: "false" +CDam-esim-ui-INT-TEST.CN-PreProd: +- name: CD_am-esim-ui INT-TEST +- mzName: CD_am-esim-ui/management-zone/CDam-esim-ui.name +- mzId: CD_am-esim-ui/management-zone/CDam-esim-ui.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-esim-ui/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_am-esim-ui/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-esim-ui/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-esim-ui/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_am-esim-ui/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-esim-ui/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-esim-ui/management-zone/README.md b/BMW-Dynatrace-config/CD_am-esim-ui/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-esim-ui/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_am-esim-ui/management-zone/default.json b/BMW-Dynatrace-config/CD_am-esim-ui/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-esim-ui/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-esim-ui/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_am-esim-ui/management-zone/management-zone.yaml new file mode 100644 index 00000000..fa123c5f --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-esim-ui/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDam-esim-ui: default.json + +CDam-esim-ui: +- name: CD_am-esim-ui +- tag: am-esim-ui diff --git a/BMW-Dynatrace-config/CD_am-esim-ui/notification/README.md b/BMW-Dynatrace-config/CD_am-esim-ui/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-esim-ui/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-esim-ui/notification/email.json b/BMW-Dynatrace-config/CD_am-esim-ui/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-esim-ui/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-esim-ui/notification/msTeams.json b/BMW-Dynatrace-config/CD_am-esim-ui/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-esim-ui/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-esim-ui/notification/notification.yaml b/BMW-Dynatrace-config/CD_am-esim-ui/notification/notification.yaml new file mode 100644 index 00000000..76663d3d --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-esim-ui/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDam-esim-ui-PROD: msTeams.json +- CDam-esim-ui-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-esim-ui-PROD: +- name: CD_am-esim-ui PROD +- alertingProfile: CD_am-esim-ui/alerting-profile/CDam-esim-ui-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDam-esim-ui-PROD.EMEA-Prod: +- name: CD_am-esim-ui PROD +- alertingProfile: CD_am-esim-ui/alerting-profile/CDam-esim-ui-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDam-esim-ui-PROD.NA-Prod: +- name: CD_am-esim-ui PROD +- alertingProfile: CD_am-esim-ui/alerting-profile/CDam-esim-ui-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDam-esim-ui-PROD.CN-Prod: +- name: CD_am-esim-ui PROD +- alertingProfile: CD_am-esim-ui/alerting-profile/CDam-esim-ui-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-esim-ui-INT: +- name: CD_am-esim-ui INT +- alertingProfile: CD_am-esim-ui/alerting-profile/CDam-esim-ui-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDam-esim-ui-INT.EMEA-PreProd: +- name: CD_am-esim-ui INT +- alertingProfile: CD_am-esim-ui/alerting-profile/CDam-esim-ui-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDam-esim-ui-INT.NA-PreProd: +- name: CD_am-esim-ui INT +- alertingProfile: CD_am-esim-ui/alerting-profile/CDam-esim-ui-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDam-esim-ui-INT.CN-PreProd: +- name: CD_am-esim-ui INT +- alertingProfile: CD_am-esim-ui/alerting-profile/CDam-esim-ui-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-esim-ui/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_am-esim-ui/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-esim-ui/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-esim-ui/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_am-esim-ui/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-esim-ui/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-esim-ui/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_am-esim-ui/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..dbb6aea9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-esim-ui/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- am-esim-ui: default.json + +am-esim-ui: +- name: CD_am-esim-ui - +- mzName: CD_am-esim-ui/management-zone/CDam-esim-ui.name +- mzId: CD_am-esim-ui/management-zone/CDam-esim-ui.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-lmcs/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_am-lmcs/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..02e68977 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-lmcs/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDam-lmcs-PROD: default.json +- CDam-lmcs-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-lmcs-PROD: +- name: CD_am-lmcs PROD +- tag: am-lmcs +- mzId: CD_am-lmcs/management-zone/CDam-lmcs.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDam-lmcs-PROD.EMEA-Prod: +- name: CD_am-lmcs PROD +- tag: am-lmcs +- mzId: CD_am-lmcs/management-zone/CDam-lmcs.id +- env: PROD +- skipDeployment: "false" +CDam-lmcs-PROD.NA-Prod: +- name: CD_am-lmcs PROD +- tag: am-lmcs +- mzId: CD_am-lmcs/management-zone/CDam-lmcs.id +- env: PROD +- skipDeployment: "false" +CDam-lmcs-PROD.CN-Prod: +- name: CD_am-lmcs PROD +- tag: am-lmcs +- mzId: CD_am-lmcs/management-zone/CDam-lmcs.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-lmcs-INT: +- name: CD_am-lmcs INT +- tag: am-lmcs +- mzId: CD_am-lmcs/management-zone/CDam-lmcs.id +- env: INT +- skipDeployment: "true" +#Configuration +CDam-lmcs-INT.EMEA-PreProd: +- name: CD_am-lmcs INT +- tag: am-lmcs +- mzId: CD_am-lmcs/management-zone/CDam-lmcs.id +- env: INT +- skipDeployment: "false" +CDam-lmcs-INT.NA-PreProd: +- name: CD_am-lmcs INT +- tag: am-lmcs +- mzId: CD_am-lmcs/management-zone/CDam-lmcs.id +- env: INT +- skipDeployment: "false" +CDam-lmcs-INT.CN-PreProd: +- name: CD_am-lmcs INT +- tag: am-lmcs +- mzId: CD_am-lmcs/management-zone/CDam-lmcs.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-lmcs/alerting-profile/default.json b/BMW-Dynatrace-config/CD_am-lmcs/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-lmcs/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-lmcs/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_am-lmcs/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-lmcs/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-lmcs/custom-service-java/README.md b/BMW-Dynatrace-config/CD_am-lmcs/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-lmcs/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-lmcs/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_am-lmcs/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-lmcs/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-lmcs/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_am-lmcs/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-lmcs/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-lmcs/dashboard/README.md b/BMW-Dynatrace-config/CD_am-lmcs/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-lmcs/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-lmcs/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_am-lmcs/dashboard/dashboard.yaml new file mode 100644 index 00000000..76fd5c14 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-lmcs/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDam-lmcs-PROD-E2E: defaultPRODE2E.json +- CDam-lmcs-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDam-lmcs-PROD-E2E: +- name: CD_am-lmcs PROD-E2E +- mzName: CD_am-lmcs/management-zone/CDam-lmcs.name +- mzId: CD_am-lmcs/management-zone/CDam-lmcs.id +- skipDeployment: "true" +#Configuration +CDam-lmcs-PROD-E2E.EMEA-Prod: +- name: CD_am-lmcs PROD-E2E +- mzName: CD_am-lmcs/management-zone/CDam-lmcs.name +- mzId: CD_am-lmcs/management-zone/CDam-lmcs.id +- tag: am-lmcs +- skipDeployment: "false" +CDam-lmcs-PROD-E2E.NA-Prod: +- name: CD_am-lmcs PROD-E2E +- mzName: CD_am-lmcs/management-zone/CDam-lmcs.name +- mzId: CD_am-lmcs/management-zone/CDam-lmcs.id +- tag: am-lmcs +- skipDeployment: "false" +CDam-lmcs-PROD-E2E.CN-Prod: +- name: CD_am-lmcs PROD-E2E +- mzName: CD_am-lmcs/management-zone/CDam-lmcs.name +- mzId: CD_am-lmcs/management-zone/CDam-lmcs.id +- tag: am-lmcs +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDam-lmcs-INT-TEST: +- name: CD_am-lmcs INT-TEST +- mzName: CD_am-lmcs/management-zone/CDam-lmcs.name +- mzId: CD_am-lmcs/management-zone/CDam-lmcs.id +- tag: am-lmcs +- skipDeployment: "true" +#Configuration +CDam-lmcs-INT-TEST.EMEA-PreProd: +- name: CD_am-lmcs INT-TEST +- mzName: CD_am-lmcs/management-zone/CDam-lmcs.name +- mzId: CD_am-lmcs/management-zone/CDam-lmcs.id +- tag: am-lmcs +- skipDeployment: "false" +CDam-lmcs-INT-TEST.NA-PreProd: +- name: CD_am-lmcs INT-TEST +- mzName: CD_am-lmcs/management-zone/CDam-lmcs.name +- mzId: CD_am-lmcs/management-zone/CDam-lmcs.id +- env: INT +- skipDeployment: "false" +CDam-lmcs-INT-TEST.CN-PreProd: +- name: CD_am-lmcs INT-TEST +- mzName: CD_am-lmcs/management-zone/CDam-lmcs.name +- mzId: CD_am-lmcs/management-zone/CDam-lmcs.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-lmcs/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_am-lmcs/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-lmcs/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-lmcs/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_am-lmcs/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-lmcs/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-lmcs/management-zone/README.md b/BMW-Dynatrace-config/CD_am-lmcs/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-lmcs/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_am-lmcs/management-zone/default.json b/BMW-Dynatrace-config/CD_am-lmcs/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-lmcs/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-lmcs/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_am-lmcs/management-zone/management-zone.yaml new file mode 100644 index 00000000..08e4beb6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-lmcs/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDam-lmcs: default.json + +CDam-lmcs: +- name: CD_am-lmcs +- tag: am-lmcs diff --git a/BMW-Dynatrace-config/CD_am-lmcs/notification/README.md b/BMW-Dynatrace-config/CD_am-lmcs/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-lmcs/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-lmcs/notification/email.json b/BMW-Dynatrace-config/CD_am-lmcs/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-lmcs/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-lmcs/notification/msTeams.json b/BMW-Dynatrace-config/CD_am-lmcs/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-lmcs/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-lmcs/notification/notification.yaml b/BMW-Dynatrace-config/CD_am-lmcs/notification/notification.yaml new file mode 100644 index 00000000..174f7c08 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-lmcs/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDam-lmcs-PROD: msTeams.json +- CDam-lmcs-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-lmcs-PROD: +- name: CD_am-lmcs PROD +- alertingProfile: CD_am-lmcs/alerting-profile/CDam-lmcs-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDam-lmcs-PROD.EMEA-Prod: +- name: CD_am-lmcs PROD +- alertingProfile: CD_am-lmcs/alerting-profile/CDam-lmcs-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDam-lmcs-PROD.NA-Prod: +- name: CD_am-lmcs PROD +- alertingProfile: CD_am-lmcs/alerting-profile/CDam-lmcs-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDam-lmcs-PROD.CN-Prod: +- name: CD_am-lmcs PROD +- alertingProfile: CD_am-lmcs/alerting-profile/CDam-lmcs-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-lmcs-INT: +- name: CD_am-lmcs INT +- alertingProfile: CD_am-lmcs/alerting-profile/CDam-lmcs-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDam-lmcs-INT.EMEA-PreProd: +- name: CD_am-lmcs INT +- alertingProfile: CD_am-lmcs/alerting-profile/CDam-lmcs-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDam-lmcs-INT.NA-PreProd: +- name: CD_am-lmcs INT +- alertingProfile: CD_am-lmcs/alerting-profile/CDam-lmcs-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDam-lmcs-INT.CN-PreProd: +- name: CD_am-lmcs INT +- alertingProfile: CD_am-lmcs/alerting-profile/CDam-lmcs-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-lmcs/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_am-lmcs/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-lmcs/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-lmcs/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_am-lmcs/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-lmcs/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-lmcs/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_am-lmcs/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..757dbc22 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-lmcs/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- am-lmcs: default.json + +am-lmcs: +- name: CD_am-lmcs - +- mzName: CD_am-lmcs/management-zone/CDam-lmcs.name +- mzId: CD_am-lmcs/management-zone/CDam-lmcs.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-mno-manager/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_am-mno-manager/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..5f55bf04 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-mno-manager/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDam-mno-manager-PROD: default.json +- CDam-mno-manager-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-mno-manager-PROD: +- name: CD_am-mno-manager PROD +- tag: am-mno-manager +- mzId: CD_am-mno-manager/management-zone/CDam-mno-manager.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDam-mno-manager-PROD.EMEA-Prod: +- name: CD_am-mno-manager PROD +- tag: am-mno-manager +- mzId: CD_am-mno-manager/management-zone/CDam-mno-manager.id +- env: PROD +- skipDeployment: "false" +CDam-mno-manager-PROD.NA-Prod: +- name: CD_am-mno-manager PROD +- tag: am-mno-manager +- mzId: CD_am-mno-manager/management-zone/CDam-mno-manager.id +- env: PROD +- skipDeployment: "false" +CDam-mno-manager-PROD.CN-Prod: +- name: CD_am-mno-manager PROD +- tag: am-mno-manager +- mzId: CD_am-mno-manager/management-zone/CDam-mno-manager.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-mno-manager-INT: +- name: CD_am-mno-manager INT +- tag: am-mno-manager +- mzId: CD_am-mno-manager/management-zone/CDam-mno-manager.id +- env: INT +- skipDeployment: "true" +#Configuration +CDam-mno-manager-INT.EMEA-PreProd: +- name: CD_am-mno-manager INT +- tag: am-mno-manager +- mzId: CD_am-mno-manager/management-zone/CDam-mno-manager.id +- env: INT +- skipDeployment: "false" +CDam-mno-manager-INT.NA-PreProd: +- name: CD_am-mno-manager INT +- tag: am-mno-manager +- mzId: CD_am-mno-manager/management-zone/CDam-mno-manager.id +- env: INT +- skipDeployment: "false" +CDam-mno-manager-INT.CN-PreProd: +- name: CD_am-mno-manager INT +- tag: am-mno-manager +- mzId: CD_am-mno-manager/management-zone/CDam-mno-manager.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-mno-manager/alerting-profile/default.json b/BMW-Dynatrace-config/CD_am-mno-manager/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-mno-manager/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-mno-manager/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_am-mno-manager/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-mno-manager/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-mno-manager/custom-service-java/README.md b/BMW-Dynatrace-config/CD_am-mno-manager/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-mno-manager/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-mno-manager/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_am-mno-manager/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-mno-manager/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-mno-manager/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_am-mno-manager/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-mno-manager/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-mno-manager/dashboard/README.md b/BMW-Dynatrace-config/CD_am-mno-manager/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-mno-manager/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-mno-manager/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_am-mno-manager/dashboard/dashboard.yaml new file mode 100644 index 00000000..9d8f0906 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-mno-manager/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDam-mno-manager-PROD-E2E: defaultPRODE2E.json +- CDam-mno-manager-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDam-mno-manager-PROD-E2E: +- name: CD_am-mno-manager PROD-E2E +- mzName: CD_am-mno-manager/management-zone/CDam-mno-manager.name +- mzId: CD_am-mno-manager/management-zone/CDam-mno-manager.id +- skipDeployment: "true" +#Configuration +CDam-mno-manager-PROD-E2E.EMEA-Prod: +- name: CD_am-mno-manager PROD-E2E +- mzName: CD_am-mno-manager/management-zone/CDam-mno-manager.name +- mzId: CD_am-mno-manager/management-zone/CDam-mno-manager.id +- tag: am-mno-manager +- skipDeployment: "false" +CDam-mno-manager-PROD-E2E.NA-Prod: +- name: CD_am-mno-manager PROD-E2E +- mzName: CD_am-mno-manager/management-zone/CDam-mno-manager.name +- mzId: CD_am-mno-manager/management-zone/CDam-mno-manager.id +- tag: am-mno-manager +- skipDeployment: "false" +CDam-mno-manager-PROD-E2E.CN-Prod: +- name: CD_am-mno-manager PROD-E2E +- mzName: CD_am-mno-manager/management-zone/CDam-mno-manager.name +- mzId: CD_am-mno-manager/management-zone/CDam-mno-manager.id +- tag: am-mno-manager +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDam-mno-manager-INT-TEST: +- name: CD_am-mno-manager INT-TEST +- mzName: CD_am-mno-manager/management-zone/CDam-mno-manager.name +- mzId: CD_am-mno-manager/management-zone/CDam-mno-manager.id +- tag: am-mno-manager +- skipDeployment: "true" +#Configuration +CDam-mno-manager-INT-TEST.EMEA-PreProd: +- name: CD_am-mno-manager INT-TEST +- mzName: CD_am-mno-manager/management-zone/CDam-mno-manager.name +- mzId: CD_am-mno-manager/management-zone/CDam-mno-manager.id +- tag: am-mno-manager +- skipDeployment: "false" +CDam-mno-manager-INT-TEST.NA-PreProd: +- name: CD_am-mno-manager INT-TEST +- mzName: CD_am-mno-manager/management-zone/CDam-mno-manager.name +- mzId: CD_am-mno-manager/management-zone/CDam-mno-manager.id +- env: INT +- skipDeployment: "false" +CDam-mno-manager-INT-TEST.CN-PreProd: +- name: CD_am-mno-manager INT-TEST +- mzName: CD_am-mno-manager/management-zone/CDam-mno-manager.name +- mzId: CD_am-mno-manager/management-zone/CDam-mno-manager.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-mno-manager/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_am-mno-manager/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-mno-manager/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-mno-manager/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_am-mno-manager/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-mno-manager/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-mno-manager/management-zone/README.md b/BMW-Dynatrace-config/CD_am-mno-manager/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-mno-manager/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_am-mno-manager/management-zone/default.json b/BMW-Dynatrace-config/CD_am-mno-manager/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-mno-manager/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-mno-manager/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_am-mno-manager/management-zone/management-zone.yaml new file mode 100644 index 00000000..349d0e85 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-mno-manager/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDam-mno-manager: default.json + +CDam-mno-manager: +- name: CD_am-mno-manager +- tag: am-mno-manager diff --git a/BMW-Dynatrace-config/CD_am-mno-manager/notification/README.md b/BMW-Dynatrace-config/CD_am-mno-manager/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-mno-manager/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-mno-manager/notification/email.json b/BMW-Dynatrace-config/CD_am-mno-manager/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-mno-manager/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-mno-manager/notification/msTeams.json b/BMW-Dynatrace-config/CD_am-mno-manager/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-mno-manager/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-mno-manager/notification/notification.yaml b/BMW-Dynatrace-config/CD_am-mno-manager/notification/notification.yaml new file mode 100644 index 00000000..3ae57652 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-mno-manager/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDam-mno-manager-PROD: msTeams.json +- CDam-mno-manager-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-mno-manager-PROD: +- name: CD_am-mno-manager PROD +- alertingProfile: CD_am-mno-manager/alerting-profile/CDam-mno-manager-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDam-mno-manager-PROD.EMEA-Prod: +- name: CD_am-mno-manager PROD +- alertingProfile: CD_am-mno-manager/alerting-profile/CDam-mno-manager-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDam-mno-manager-PROD.NA-Prod: +- name: CD_am-mno-manager PROD +- alertingProfile: CD_am-mno-manager/alerting-profile/CDam-mno-manager-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDam-mno-manager-PROD.CN-Prod: +- name: CD_am-mno-manager PROD +- alertingProfile: CD_am-mno-manager/alerting-profile/CDam-mno-manager-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-mno-manager-INT: +- name: CD_am-mno-manager INT +- alertingProfile: CD_am-mno-manager/alerting-profile/CDam-mno-manager-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDam-mno-manager-INT.EMEA-PreProd: +- name: CD_am-mno-manager INT +- alertingProfile: CD_am-mno-manager/alerting-profile/CDam-mno-manager-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDam-mno-manager-INT.NA-PreProd: +- name: CD_am-mno-manager INT +- alertingProfile: CD_am-mno-manager/alerting-profile/CDam-mno-manager-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDam-mno-manager-INT.CN-PreProd: +- name: CD_am-mno-manager INT +- alertingProfile: CD_am-mno-manager/alerting-profile/CDam-mno-manager-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-mno-manager/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_am-mno-manager/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-mno-manager/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-mno-manager/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_am-mno-manager/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-mno-manager/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-mno-manager/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_am-mno-manager/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..07851b9d --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-mno-manager/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- am-mno-manager: default.json + +am-mno-manager: +- name: CD_am-mno-manager - +- mzName: CD_am-mno-manager/management-zone/CDam-mno-manager.name +- mzId: CD_am-mno-manager/management-zone/CDam-mno-manager.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-proxy/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_am-proxy/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..1d735090 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-proxy/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDam-proxy-PROD: default.json +- CDam-proxy-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-proxy-PROD: +- name: CD_am-proxy PROD +- tag: am-proxy +- mzId: CD_am-proxy/management-zone/CDam-proxy.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDam-proxy-PROD.EMEA-Prod: +- name: CD_am-proxy PROD +- tag: am-proxy +- mzId: CD_am-proxy/management-zone/CDam-proxy.id +- env: PROD +- skipDeployment: "false" +CDam-proxy-PROD.NA-Prod: +- name: CD_am-proxy PROD +- tag: am-proxy +- mzId: CD_am-proxy/management-zone/CDam-proxy.id +- env: PROD +- skipDeployment: "false" +CDam-proxy-PROD.CN-Prod: +- name: CD_am-proxy PROD +- tag: am-proxy +- mzId: CD_am-proxy/management-zone/CDam-proxy.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-proxy-INT: +- name: CD_am-proxy INT +- tag: am-proxy +- mzId: CD_am-proxy/management-zone/CDam-proxy.id +- env: INT +- skipDeployment: "true" +#Configuration +CDam-proxy-INT.EMEA-PreProd: +- name: CD_am-proxy INT +- tag: am-proxy +- mzId: CD_am-proxy/management-zone/CDam-proxy.id +- env: INT +- skipDeployment: "false" +CDam-proxy-INT.NA-PreProd: +- name: CD_am-proxy INT +- tag: am-proxy +- mzId: CD_am-proxy/management-zone/CDam-proxy.id +- env: INT +- skipDeployment: "false" +CDam-proxy-INT.CN-PreProd: +- name: CD_am-proxy INT +- tag: am-proxy +- mzId: CD_am-proxy/management-zone/CDam-proxy.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-proxy/alerting-profile/default.json b/BMW-Dynatrace-config/CD_am-proxy/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-proxy/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-proxy/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_am-proxy/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-proxy/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-proxy/custom-service-java/README.md b/BMW-Dynatrace-config/CD_am-proxy/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-proxy/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-proxy/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_am-proxy/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-proxy/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-proxy/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_am-proxy/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-proxy/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-proxy/dashboard/README.md b/BMW-Dynatrace-config/CD_am-proxy/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-proxy/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-proxy/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_am-proxy/dashboard/dashboard.yaml new file mode 100644 index 00000000..3e2cee9b --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-proxy/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDam-proxy-PROD-E2E: defaultPRODE2E.json +- CDam-proxy-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDam-proxy-PROD-E2E: +- name: CD_am-proxy PROD-E2E +- mzName: CD_am-proxy/management-zone/CDam-proxy.name +- mzId: CD_am-proxy/management-zone/CDam-proxy.id +- skipDeployment: "true" +#Configuration +CDam-proxy-PROD-E2E.EMEA-Prod: +- name: CD_am-proxy PROD-E2E +- mzName: CD_am-proxy/management-zone/CDam-proxy.name +- mzId: CD_am-proxy/management-zone/CDam-proxy.id +- tag: am-proxy +- skipDeployment: "false" +CDam-proxy-PROD-E2E.NA-Prod: +- name: CD_am-proxy PROD-E2E +- mzName: CD_am-proxy/management-zone/CDam-proxy.name +- mzId: CD_am-proxy/management-zone/CDam-proxy.id +- tag: am-proxy +- skipDeployment: "false" +CDam-proxy-PROD-E2E.CN-Prod: +- name: CD_am-proxy PROD-E2E +- mzName: CD_am-proxy/management-zone/CDam-proxy.name +- mzId: CD_am-proxy/management-zone/CDam-proxy.id +- tag: am-proxy +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDam-proxy-INT-TEST: +- name: CD_am-proxy INT-TEST +- mzName: CD_am-proxy/management-zone/CDam-proxy.name +- mzId: CD_am-proxy/management-zone/CDam-proxy.id +- tag: am-proxy +- skipDeployment: "true" +#Configuration +CDam-proxy-INT-TEST.EMEA-PreProd: +- name: CD_am-proxy INT-TEST +- mzName: CD_am-proxy/management-zone/CDam-proxy.name +- mzId: CD_am-proxy/management-zone/CDam-proxy.id +- tag: am-proxy +- skipDeployment: "false" +CDam-proxy-INT-TEST.NA-PreProd: +- name: CD_am-proxy INT-TEST +- mzName: CD_am-proxy/management-zone/CDam-proxy.name +- mzId: CD_am-proxy/management-zone/CDam-proxy.id +- env: INT +- skipDeployment: "false" +CDam-proxy-INT-TEST.CN-PreProd: +- name: CD_am-proxy INT-TEST +- mzName: CD_am-proxy/management-zone/CDam-proxy.name +- mzId: CD_am-proxy/management-zone/CDam-proxy.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-proxy/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_am-proxy/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-proxy/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-proxy/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_am-proxy/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-proxy/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-proxy/management-zone/README.md b/BMW-Dynatrace-config/CD_am-proxy/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-proxy/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_am-proxy/management-zone/default.json b/BMW-Dynatrace-config/CD_am-proxy/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-proxy/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-proxy/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_am-proxy/management-zone/management-zone.yaml new file mode 100644 index 00000000..69b19133 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-proxy/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDam-proxy: default.json + +CDam-proxy: +- name: CD_am-proxy +- tag: am-proxy diff --git a/BMW-Dynatrace-config/CD_am-proxy/notification/README.md b/BMW-Dynatrace-config/CD_am-proxy/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-proxy/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-proxy/notification/email.json b/BMW-Dynatrace-config/CD_am-proxy/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-proxy/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-proxy/notification/msTeams.json b/BMW-Dynatrace-config/CD_am-proxy/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-proxy/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-proxy/notification/notification.yaml b/BMW-Dynatrace-config/CD_am-proxy/notification/notification.yaml new file mode 100644 index 00000000..d3792ea0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-proxy/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDam-proxy-PROD: msTeams.json +- CDam-proxy-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-proxy-PROD: +- name: CD_am-proxy PROD +- alertingProfile: CD_am-proxy/alerting-profile/CDam-proxy-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDam-proxy-PROD.EMEA-Prod: +- name: CD_am-proxy PROD +- alertingProfile: CD_am-proxy/alerting-profile/CDam-proxy-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDam-proxy-PROD.NA-Prod: +- name: CD_am-proxy PROD +- alertingProfile: CD_am-proxy/alerting-profile/CDam-proxy-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDam-proxy-PROD.CN-Prod: +- name: CD_am-proxy PROD +- alertingProfile: CD_am-proxy/alerting-profile/CDam-proxy-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-proxy-INT: +- name: CD_am-proxy INT +- alertingProfile: CD_am-proxy/alerting-profile/CDam-proxy-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDam-proxy-INT.EMEA-PreProd: +- name: CD_am-proxy INT +- alertingProfile: CD_am-proxy/alerting-profile/CDam-proxy-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDam-proxy-INT.NA-PreProd: +- name: CD_am-proxy INT +- alertingProfile: CD_am-proxy/alerting-profile/CDam-proxy-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDam-proxy-INT.CN-PreProd: +- name: CD_am-proxy INT +- alertingProfile: CD_am-proxy/alerting-profile/CDam-proxy-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-proxy/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_am-proxy/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-proxy/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-proxy/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_am-proxy/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-proxy/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-proxy/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_am-proxy/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..ed1676d8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-proxy/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- am-proxy: default.json + +am-proxy: +- name: CD_am-proxy - +- mzName: CD_am-proxy/management-zone/CDam-proxy.name +- mzId: CD_am-proxy/management-zone/CDam-proxy.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-store/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_am-store/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..a1208cb0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-store/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDam-store-PROD: default.json +- CDam-store-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-store-PROD: +- name: CD_am-store PROD +- tag: am-store +- mzId: CD_am-store/management-zone/CDam-store.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDam-store-PROD.EMEA-Prod: +- name: CD_am-store PROD +- tag: am-store +- mzId: CD_am-store/management-zone/CDam-store.id +- env: PROD +- skipDeployment: "false" +CDam-store-PROD.NA-Prod: +- name: CD_am-store PROD +- tag: am-store +- mzId: CD_am-store/management-zone/CDam-store.id +- env: PROD +- skipDeployment: "false" +CDam-store-PROD.CN-Prod: +- name: CD_am-store PROD +- tag: am-store +- mzId: CD_am-store/management-zone/CDam-store.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-store-INT: +- name: CD_am-store INT +- tag: am-store +- mzId: CD_am-store/management-zone/CDam-store.id +- env: INT +- skipDeployment: "true" +#Configuration +CDam-store-INT.EMEA-PreProd: +- name: CD_am-store INT +- tag: am-store +- mzId: CD_am-store/management-zone/CDam-store.id +- env: INT +- skipDeployment: "false" +CDam-store-INT.NA-PreProd: +- name: CD_am-store INT +- tag: am-store +- mzId: CD_am-store/management-zone/CDam-store.id +- env: INT +- skipDeployment: "false" +CDam-store-INT.CN-PreProd: +- name: CD_am-store INT +- tag: am-store +- mzId: CD_am-store/management-zone/CDam-store.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-store/alerting-profile/default.json b/BMW-Dynatrace-config/CD_am-store/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-store/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-store/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_am-store/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-store/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-store/custom-service-java/README.md b/BMW-Dynatrace-config/CD_am-store/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-store/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-store/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_am-store/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-store/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-store/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_am-store/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-store/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-store/dashboard/README.md b/BMW-Dynatrace-config/CD_am-store/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-store/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-store/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_am-store/dashboard/dashboard.yaml new file mode 100644 index 00000000..c74c235b --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-store/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDam-store-PROD-E2E: defaultPRODE2E.json +- CDam-store-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDam-store-PROD-E2E: +- name: CD_am-store PROD-E2E +- mzName: CD_am-store/management-zone/CDam-store.name +- mzId: CD_am-store/management-zone/CDam-store.id +- skipDeployment: "true" +#Configuration +CDam-store-PROD-E2E.EMEA-Prod: +- name: CD_am-store PROD-E2E +- mzName: CD_am-store/management-zone/CDam-store.name +- mzId: CD_am-store/management-zone/CDam-store.id +- tag: am-store +- skipDeployment: "false" +CDam-store-PROD-E2E.NA-Prod: +- name: CD_am-store PROD-E2E +- mzName: CD_am-store/management-zone/CDam-store.name +- mzId: CD_am-store/management-zone/CDam-store.id +- tag: am-store +- skipDeployment: "false" +CDam-store-PROD-E2E.CN-Prod: +- name: CD_am-store PROD-E2E +- mzName: CD_am-store/management-zone/CDam-store.name +- mzId: CD_am-store/management-zone/CDam-store.id +- tag: am-store +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDam-store-INT-TEST: +- name: CD_am-store INT-TEST +- mzName: CD_am-store/management-zone/CDam-store.name +- mzId: CD_am-store/management-zone/CDam-store.id +- tag: am-store +- skipDeployment: "true" +#Configuration +CDam-store-INT-TEST.EMEA-PreProd: +- name: CD_am-store INT-TEST +- mzName: CD_am-store/management-zone/CDam-store.name +- mzId: CD_am-store/management-zone/CDam-store.id +- tag: am-store +- skipDeployment: "false" +CDam-store-INT-TEST.NA-PreProd: +- name: CD_am-store INT-TEST +- mzName: CD_am-store/management-zone/CDam-store.name +- mzId: CD_am-store/management-zone/CDam-store.id +- env: INT +- skipDeployment: "false" +CDam-store-INT-TEST.CN-PreProd: +- name: CD_am-store INT-TEST +- mzName: CD_am-store/management-zone/CDam-store.name +- mzId: CD_am-store/management-zone/CDam-store.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-store/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_am-store/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-store/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-store/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_am-store/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-store/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-store/management-zone/README.md b/BMW-Dynatrace-config/CD_am-store/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-store/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_am-store/management-zone/default.json b/BMW-Dynatrace-config/CD_am-store/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-store/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-store/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_am-store/management-zone/management-zone.yaml new file mode 100644 index 00000000..7ab06e80 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-store/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDam-store: default.json + +CDam-store: +- name: CD_am-store +- tag: am-store diff --git a/BMW-Dynatrace-config/CD_am-store/notification/README.md b/BMW-Dynatrace-config/CD_am-store/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-store/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-store/notification/email.json b/BMW-Dynatrace-config/CD_am-store/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-store/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-store/notification/msTeams.json b/BMW-Dynatrace-config/CD_am-store/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-store/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-store/notification/notification.yaml b/BMW-Dynatrace-config/CD_am-store/notification/notification.yaml new file mode 100644 index 00000000..5bd00c00 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-store/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDam-store-PROD: msTeams.json +- CDam-store-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-store-PROD: +- name: CD_am-store PROD +- alertingProfile: CD_am-store/alerting-profile/CDam-store-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDam-store-PROD.EMEA-Prod: +- name: CD_am-store PROD +- alertingProfile: CD_am-store/alerting-profile/CDam-store-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDam-store-PROD.NA-Prod: +- name: CD_am-store PROD +- alertingProfile: CD_am-store/alerting-profile/CDam-store-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDam-store-PROD.CN-Prod: +- name: CD_am-store PROD +- alertingProfile: CD_am-store/alerting-profile/CDam-store-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-store-INT: +- name: CD_am-store INT +- alertingProfile: CD_am-store/alerting-profile/CDam-store-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDam-store-INT.EMEA-PreProd: +- name: CD_am-store INT +- alertingProfile: CD_am-store/alerting-profile/CDam-store-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDam-store-INT.NA-PreProd: +- name: CD_am-store INT +- alertingProfile: CD_am-store/alerting-profile/CDam-store-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDam-store-INT.CN-PreProd: +- name: CD_am-store INT +- alertingProfile: CD_am-store/alerting-profile/CDam-store-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-store/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_am-store/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-store/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-store/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_am-store/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-store/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-store/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_am-store/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..15b374bf --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-store/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- am-store: default.json + +am-store: +- name: CD_am-store - +- mzName: CD_am-store/management-zone/CDam-store.name +- mzId: CD_am-store/management-zone/CDam-store.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-svms/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_am-svms/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..ccf5d39f --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-svms/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDam-svms-PROD: default.json +- CDam-svms-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-svms-PROD: +- name: CD_am-svms PROD +- tag: am-svms +- mzId: CD_am-svms/management-zone/CDam-svms.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDam-svms-PROD.EMEA-Prod: +- name: CD_am-svms PROD +- tag: am-svms +- mzId: CD_am-svms/management-zone/CDam-svms.id +- env: PROD +- skipDeployment: "false" +CDam-svms-PROD.NA-Prod: +- name: CD_am-svms PROD +- tag: am-svms +- mzId: CD_am-svms/management-zone/CDam-svms.id +- env: PROD +- skipDeployment: "false" +CDam-svms-PROD.CN-Prod: +- name: CD_am-svms PROD +- tag: am-svms +- mzId: CD_am-svms/management-zone/CDam-svms.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-svms-INT: +- name: CD_am-svms INT +- tag: am-svms +- mzId: CD_am-svms/management-zone/CDam-svms.id +- env: INT +- skipDeployment: "true" +#Configuration +CDam-svms-INT.EMEA-PreProd: +- name: CD_am-svms INT +- tag: am-svms +- mzId: CD_am-svms/management-zone/CDam-svms.id +- env: INT +- skipDeployment: "false" +CDam-svms-INT.NA-PreProd: +- name: CD_am-svms INT +- tag: am-svms +- mzId: CD_am-svms/management-zone/CDam-svms.id +- env: INT +- skipDeployment: "false" +CDam-svms-INT.CN-PreProd: +- name: CD_am-svms INT +- tag: am-svms +- mzId: CD_am-svms/management-zone/CDam-svms.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-svms/alerting-profile/default.json b/BMW-Dynatrace-config/CD_am-svms/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-svms/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-svms/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_am-svms/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-svms/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-svms/custom-service-java/README.md b/BMW-Dynatrace-config/CD_am-svms/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-svms/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-svms/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_am-svms/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-svms/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-svms/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_am-svms/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-svms/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-svms/dashboard/README.md b/BMW-Dynatrace-config/CD_am-svms/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-svms/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-svms/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_am-svms/dashboard/dashboard.yaml new file mode 100644 index 00000000..b70abc62 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-svms/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDam-svms-PROD-E2E: defaultPRODE2E.json +- CDam-svms-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDam-svms-PROD-E2E: +- name: CD_am-svms PROD-E2E +- mzName: CD_am-svms/management-zone/CDam-svms.name +- mzId: CD_am-svms/management-zone/CDam-svms.id +- skipDeployment: "true" +#Configuration +CDam-svms-PROD-E2E.EMEA-Prod: +- name: CD_am-svms PROD-E2E +- mzName: CD_am-svms/management-zone/CDam-svms.name +- mzId: CD_am-svms/management-zone/CDam-svms.id +- tag: am-svms +- skipDeployment: "false" +CDam-svms-PROD-E2E.NA-Prod: +- name: CD_am-svms PROD-E2E +- mzName: CD_am-svms/management-zone/CDam-svms.name +- mzId: CD_am-svms/management-zone/CDam-svms.id +- tag: am-svms +- skipDeployment: "false" +CDam-svms-PROD-E2E.CN-Prod: +- name: CD_am-svms PROD-E2E +- mzName: CD_am-svms/management-zone/CDam-svms.name +- mzId: CD_am-svms/management-zone/CDam-svms.id +- tag: am-svms +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDam-svms-INT-TEST: +- name: CD_am-svms INT-TEST +- mzName: CD_am-svms/management-zone/CDam-svms.name +- mzId: CD_am-svms/management-zone/CDam-svms.id +- tag: am-svms +- skipDeployment: "true" +#Configuration +CDam-svms-INT-TEST.EMEA-PreProd: +- name: CD_am-svms INT-TEST +- mzName: CD_am-svms/management-zone/CDam-svms.name +- mzId: CD_am-svms/management-zone/CDam-svms.id +- tag: am-svms +- skipDeployment: "false" +CDam-svms-INT-TEST.NA-PreProd: +- name: CD_am-svms INT-TEST +- mzName: CD_am-svms/management-zone/CDam-svms.name +- mzId: CD_am-svms/management-zone/CDam-svms.id +- env: INT +- skipDeployment: "false" +CDam-svms-INT-TEST.CN-PreProd: +- name: CD_am-svms INT-TEST +- mzName: CD_am-svms/management-zone/CDam-svms.name +- mzId: CD_am-svms/management-zone/CDam-svms.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-svms/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_am-svms/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-svms/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-svms/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_am-svms/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-svms/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-svms/management-zone/README.md b/BMW-Dynatrace-config/CD_am-svms/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-svms/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_am-svms/management-zone/default.json b/BMW-Dynatrace-config/CD_am-svms/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-svms/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-svms/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_am-svms/management-zone/management-zone.yaml new file mode 100644 index 00000000..161a3a96 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-svms/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDam-svms: default.json + +CDam-svms: +- name: CD_am-svms +- tag: am-svms diff --git a/BMW-Dynatrace-config/CD_am-svms/notification/README.md b/BMW-Dynatrace-config/CD_am-svms/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-svms/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-svms/notification/email.json b/BMW-Dynatrace-config/CD_am-svms/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-svms/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-svms/notification/msTeams.json b/BMW-Dynatrace-config/CD_am-svms/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-svms/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-svms/notification/notification.yaml b/BMW-Dynatrace-config/CD_am-svms/notification/notification.yaml new file mode 100644 index 00000000..0c630b8c --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-svms/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDam-svms-PROD: msTeams.json +- CDam-svms-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-svms-PROD: +- name: CD_am-svms PROD +- alertingProfile: CD_am-svms/alerting-profile/CDam-svms-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDam-svms-PROD.EMEA-Prod: +- name: CD_am-svms PROD +- alertingProfile: CD_am-svms/alerting-profile/CDam-svms-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDam-svms-PROD.NA-Prod: +- name: CD_am-svms PROD +- alertingProfile: CD_am-svms/alerting-profile/CDam-svms-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDam-svms-PROD.CN-Prod: +- name: CD_am-svms PROD +- alertingProfile: CD_am-svms/alerting-profile/CDam-svms-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-svms-INT: +- name: CD_am-svms INT +- alertingProfile: CD_am-svms/alerting-profile/CDam-svms-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDam-svms-INT.EMEA-PreProd: +- name: CD_am-svms INT +- alertingProfile: CD_am-svms/alerting-profile/CDam-svms-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDam-svms-INT.NA-PreProd: +- name: CD_am-svms INT +- alertingProfile: CD_am-svms/alerting-profile/CDam-svms-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDam-svms-INT.CN-PreProd: +- name: CD_am-svms INT +- alertingProfile: CD_am-svms/alerting-profile/CDam-svms-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-svms/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_am-svms/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-svms/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-svms/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_am-svms/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-svms/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-svms/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_am-svms/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..181224af --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-svms/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- am-svms: default.json + +am-svms: +- name: CD_am-svms - +- mzName: CD_am-svms/management-zone/CDam-svms.name +- mzId: CD_am-svms/management-zone/CDam-svms.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ui/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_am-ui/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..e4dda300 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ui/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDam-ui-PROD: default.json +- CDam-ui-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-ui-PROD: +- name: CD_am-ui PROD +- tag: am-ui +- mzId: CD_am-ui/management-zone/CDam-ui.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDam-ui-PROD.EMEA-Prod: +- name: CD_am-ui PROD +- tag: am-ui +- mzId: CD_am-ui/management-zone/CDam-ui.id +- env: PROD +- skipDeployment: "false" +CDam-ui-PROD.NA-Prod: +- name: CD_am-ui PROD +- tag: am-ui +- mzId: CD_am-ui/management-zone/CDam-ui.id +- env: PROD +- skipDeployment: "false" +CDam-ui-PROD.CN-Prod: +- name: CD_am-ui PROD +- tag: am-ui +- mzId: CD_am-ui/management-zone/CDam-ui.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-ui-INT: +- name: CD_am-ui INT +- tag: am-ui +- mzId: CD_am-ui/management-zone/CDam-ui.id +- env: INT +- skipDeployment: "true" +#Configuration +CDam-ui-INT.EMEA-PreProd: +- name: CD_am-ui INT +- tag: am-ui +- mzId: CD_am-ui/management-zone/CDam-ui.id +- env: INT +- skipDeployment: "false" +CDam-ui-INT.NA-PreProd: +- name: CD_am-ui INT +- tag: am-ui +- mzId: CD_am-ui/management-zone/CDam-ui.id +- env: INT +- skipDeployment: "false" +CDam-ui-INT.CN-PreProd: +- name: CD_am-ui INT +- tag: am-ui +- mzId: CD_am-ui/management-zone/CDam-ui.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ui/alerting-profile/default.json b/BMW-Dynatrace-config/CD_am-ui/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ui/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ui/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_am-ui/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ui/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ui/custom-service-java/README.md b/BMW-Dynatrace-config/CD_am-ui/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ui/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ui/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_am-ui/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ui/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ui/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_am-ui/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ui/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ui/dashboard/README.md b/BMW-Dynatrace-config/CD_am-ui/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ui/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ui/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_am-ui/dashboard/dashboard.yaml new file mode 100644 index 00000000..fe07263c --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ui/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDam-ui-PROD-E2E: defaultPRODE2E.json +- CDam-ui-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDam-ui-PROD-E2E: +- name: CD_am-ui PROD-E2E +- mzName: CD_am-ui/management-zone/CDam-ui.name +- mzId: CD_am-ui/management-zone/CDam-ui.id +- skipDeployment: "true" +#Configuration +CDam-ui-PROD-E2E.EMEA-Prod: +- name: CD_am-ui PROD-E2E +- mzName: CD_am-ui/management-zone/CDam-ui.name +- mzId: CD_am-ui/management-zone/CDam-ui.id +- tag: am-ui +- skipDeployment: "false" +CDam-ui-PROD-E2E.NA-Prod: +- name: CD_am-ui PROD-E2E +- mzName: CD_am-ui/management-zone/CDam-ui.name +- mzId: CD_am-ui/management-zone/CDam-ui.id +- tag: am-ui +- skipDeployment: "false" +CDam-ui-PROD-E2E.CN-Prod: +- name: CD_am-ui PROD-E2E +- mzName: CD_am-ui/management-zone/CDam-ui.name +- mzId: CD_am-ui/management-zone/CDam-ui.id +- tag: am-ui +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDam-ui-INT-TEST: +- name: CD_am-ui INT-TEST +- mzName: CD_am-ui/management-zone/CDam-ui.name +- mzId: CD_am-ui/management-zone/CDam-ui.id +- tag: am-ui +- skipDeployment: "true" +#Configuration +CDam-ui-INT-TEST.EMEA-PreProd: +- name: CD_am-ui INT-TEST +- mzName: CD_am-ui/management-zone/CDam-ui.name +- mzId: CD_am-ui/management-zone/CDam-ui.id +- tag: am-ui +- skipDeployment: "false" +CDam-ui-INT-TEST.NA-PreProd: +- name: CD_am-ui INT-TEST +- mzName: CD_am-ui/management-zone/CDam-ui.name +- mzId: CD_am-ui/management-zone/CDam-ui.id +- env: INT +- skipDeployment: "false" +CDam-ui-INT-TEST.CN-PreProd: +- name: CD_am-ui INT-TEST +- mzName: CD_am-ui/management-zone/CDam-ui.name +- mzId: CD_am-ui/management-zone/CDam-ui.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ui/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_am-ui/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ui/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ui/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_am-ui/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ui/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ui/management-zone/README.md b/BMW-Dynatrace-config/CD_am-ui/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ui/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_am-ui/management-zone/default.json b/BMW-Dynatrace-config/CD_am-ui/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ui/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ui/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_am-ui/management-zone/management-zone.yaml new file mode 100644 index 00000000..00b09a31 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ui/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDam-ui: default.json + +CDam-ui: +- name: CD_am-ui +- tag: am-ui diff --git a/BMW-Dynatrace-config/CD_am-ui/notification/README.md b/BMW-Dynatrace-config/CD_am-ui/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ui/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ui/notification/email.json b/BMW-Dynatrace-config/CD_am-ui/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ui/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ui/notification/msTeams.json b/BMW-Dynatrace-config/CD_am-ui/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ui/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ui/notification/notification.yaml b/BMW-Dynatrace-config/CD_am-ui/notification/notification.yaml new file mode 100644 index 00000000..43469f13 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ui/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDam-ui-PROD: msTeams.json +- CDam-ui-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-ui-PROD: +- name: CD_am-ui PROD +- alertingProfile: CD_am-ui/alerting-profile/CDam-ui-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDam-ui-PROD.EMEA-Prod: +- name: CD_am-ui PROD +- alertingProfile: CD_am-ui/alerting-profile/CDam-ui-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDam-ui-PROD.NA-Prod: +- name: CD_am-ui PROD +- alertingProfile: CD_am-ui/alerting-profile/CDam-ui-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDam-ui-PROD.CN-Prod: +- name: CD_am-ui PROD +- alertingProfile: CD_am-ui/alerting-profile/CDam-ui-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-ui-INT: +- name: CD_am-ui INT +- alertingProfile: CD_am-ui/alerting-profile/CDam-ui-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDam-ui-INT.EMEA-PreProd: +- name: CD_am-ui INT +- alertingProfile: CD_am-ui/alerting-profile/CDam-ui-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDam-ui-INT.NA-PreProd: +- name: CD_am-ui INT +- alertingProfile: CD_am-ui/alerting-profile/CDam-ui-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDam-ui-INT.CN-PreProd: +- name: CD_am-ui INT +- alertingProfile: CD_am-ui/alerting-profile/CDam-ui-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ui/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_am-ui/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ui/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ui/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_am-ui/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ui/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ui/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_am-ui/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..ede65afd --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ui/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- am-ui: default.json + +am-ui: +- name: CD_am-ui - +- mzName: CD_am-ui/management-zone/CDam-ui.name +- mzId: CD_am-ui/management-zone/CDam-ui.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-usage/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_am-usage/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..ff29bceb --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-usage/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDam-usage-PROD: default.json +- CDam-usage-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-usage-PROD: +- name: CD_am-usage PROD +- tag: am-usage +- mzId: CD_am-usage/management-zone/CDam-usage.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDam-usage-PROD.EMEA-Prod: +- name: CD_am-usage PROD +- tag: am-usage +- mzId: CD_am-usage/management-zone/CDam-usage.id +- env: PROD +- skipDeployment: "false" +CDam-usage-PROD.NA-Prod: +- name: CD_am-usage PROD +- tag: am-usage +- mzId: CD_am-usage/management-zone/CDam-usage.id +- env: PROD +- skipDeployment: "false" +CDam-usage-PROD.CN-Prod: +- name: CD_am-usage PROD +- tag: am-usage +- mzId: CD_am-usage/management-zone/CDam-usage.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-usage-INT: +- name: CD_am-usage INT +- tag: am-usage +- mzId: CD_am-usage/management-zone/CDam-usage.id +- env: INT +- skipDeployment: "true" +#Configuration +CDam-usage-INT.EMEA-PreProd: +- name: CD_am-usage INT +- tag: am-usage +- mzId: CD_am-usage/management-zone/CDam-usage.id +- env: INT +- skipDeployment: "false" +CDam-usage-INT.NA-PreProd: +- name: CD_am-usage INT +- tag: am-usage +- mzId: CD_am-usage/management-zone/CDam-usage.id +- env: INT +- skipDeployment: "false" +CDam-usage-INT.CN-PreProd: +- name: CD_am-usage INT +- tag: am-usage +- mzId: CD_am-usage/management-zone/CDam-usage.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-usage/alerting-profile/default.json b/BMW-Dynatrace-config/CD_am-usage/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-usage/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-usage/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_am-usage/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-usage/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-usage/custom-service-java/README.md b/BMW-Dynatrace-config/CD_am-usage/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-usage/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-usage/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_am-usage/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-usage/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-usage/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_am-usage/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-usage/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-usage/dashboard/README.md b/BMW-Dynatrace-config/CD_am-usage/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-usage/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-usage/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_am-usage/dashboard/dashboard.yaml new file mode 100644 index 00000000..8525ce8c --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-usage/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDam-usage-PROD-E2E: defaultPRODE2E.json +- CDam-usage-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDam-usage-PROD-E2E: +- name: CD_am-usage PROD-E2E +- mzName: CD_am-usage/management-zone/CDam-usage.name +- mzId: CD_am-usage/management-zone/CDam-usage.id +- skipDeployment: "true" +#Configuration +CDam-usage-PROD-E2E.EMEA-Prod: +- name: CD_am-usage PROD-E2E +- mzName: CD_am-usage/management-zone/CDam-usage.name +- mzId: CD_am-usage/management-zone/CDam-usage.id +- tag: am-usage +- skipDeployment: "false" +CDam-usage-PROD-E2E.NA-Prod: +- name: CD_am-usage PROD-E2E +- mzName: CD_am-usage/management-zone/CDam-usage.name +- mzId: CD_am-usage/management-zone/CDam-usage.id +- tag: am-usage +- skipDeployment: "false" +CDam-usage-PROD-E2E.CN-Prod: +- name: CD_am-usage PROD-E2E +- mzName: CD_am-usage/management-zone/CDam-usage.name +- mzId: CD_am-usage/management-zone/CDam-usage.id +- tag: am-usage +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDam-usage-INT-TEST: +- name: CD_am-usage INT-TEST +- mzName: CD_am-usage/management-zone/CDam-usage.name +- mzId: CD_am-usage/management-zone/CDam-usage.id +- tag: am-usage +- skipDeployment: "true" +#Configuration +CDam-usage-INT-TEST.EMEA-PreProd: +- name: CD_am-usage INT-TEST +- mzName: CD_am-usage/management-zone/CDam-usage.name +- mzId: CD_am-usage/management-zone/CDam-usage.id +- tag: am-usage +- skipDeployment: "false" +CDam-usage-INT-TEST.NA-PreProd: +- name: CD_am-usage INT-TEST +- mzName: CD_am-usage/management-zone/CDam-usage.name +- mzId: CD_am-usage/management-zone/CDam-usage.id +- env: INT +- skipDeployment: "false" +CDam-usage-INT-TEST.CN-PreProd: +- name: CD_am-usage INT-TEST +- mzName: CD_am-usage/management-zone/CDam-usage.name +- mzId: CD_am-usage/management-zone/CDam-usage.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-usage/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_am-usage/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-usage/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-usage/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_am-usage/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-usage/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-usage/management-zone/README.md b/BMW-Dynatrace-config/CD_am-usage/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-usage/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_am-usage/management-zone/default.json b/BMW-Dynatrace-config/CD_am-usage/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-usage/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-usage/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_am-usage/management-zone/management-zone.yaml new file mode 100644 index 00000000..21a92f14 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-usage/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDam-usage: default.json + +CDam-usage: +- name: CD_am-usage +- tag: am-usage diff --git a/BMW-Dynatrace-config/CD_am-usage/notification/README.md b/BMW-Dynatrace-config/CD_am-usage/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-usage/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-usage/notification/email.json b/BMW-Dynatrace-config/CD_am-usage/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-usage/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-usage/notification/msTeams.json b/BMW-Dynatrace-config/CD_am-usage/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-usage/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-usage/notification/notification.yaml b/BMW-Dynatrace-config/CD_am-usage/notification/notification.yaml new file mode 100644 index 00000000..df7a3cc6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-usage/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDam-usage-PROD: msTeams.json +- CDam-usage-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-usage-PROD: +- name: CD_am-usage PROD +- alertingProfile: CD_am-usage/alerting-profile/CDam-usage-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDam-usage-PROD.EMEA-Prod: +- name: CD_am-usage PROD +- alertingProfile: CD_am-usage/alerting-profile/CDam-usage-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDam-usage-PROD.NA-Prod: +- name: CD_am-usage PROD +- alertingProfile: CD_am-usage/alerting-profile/CDam-usage-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDam-usage-PROD.CN-Prod: +- name: CD_am-usage PROD +- alertingProfile: CD_am-usage/alerting-profile/CDam-usage-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-usage-INT: +- name: CD_am-usage INT +- alertingProfile: CD_am-usage/alerting-profile/CDam-usage-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDam-usage-INT.EMEA-PreProd: +- name: CD_am-usage INT +- alertingProfile: CD_am-usage/alerting-profile/CDam-usage-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDam-usage-INT.NA-PreProd: +- name: CD_am-usage INT +- alertingProfile: CD_am-usage/alerting-profile/CDam-usage-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDam-usage-INT.CN-PreProd: +- name: CD_am-usage INT +- alertingProfile: CD_am-usage/alerting-profile/CDam-usage-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-usage/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_am-usage/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-usage/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-usage/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_am-usage/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-usage/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-usage/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_am-usage/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..3152a9a9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-usage/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- am-usage: default.json + +am-usage: +- name: CD_am-usage - +- mzName: CD_am-usage/management-zone/CDam-usage.name +- mzId: CD_am-usage/management-zone/CDam-usage.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vehicle-activation/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_am-vehicle-activation/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..c2ad8540 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vehicle-activation/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDam-vehicle-activation-PROD: default.json +- CDam-vehicle-activation-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-vehicle-activation-PROD: +- name: CD_am-vehicle-activation PROD +- tag: am-vehicle-activation +- mzId: CD_am-vehicle-activation/management-zone/CDam-vehicle-activation.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDam-vehicle-activation-PROD.EMEA-Prod: +- name: CD_am-vehicle-activation PROD +- tag: am-vehicle-activation +- mzId: CD_am-vehicle-activation/management-zone/CDam-vehicle-activation.id +- env: PROD +- skipDeployment: "false" +CDam-vehicle-activation-PROD.NA-Prod: +- name: CD_am-vehicle-activation PROD +- tag: am-vehicle-activation +- mzId: CD_am-vehicle-activation/management-zone/CDam-vehicle-activation.id +- env: PROD +- skipDeployment: "false" +CDam-vehicle-activation-PROD.CN-Prod: +- name: CD_am-vehicle-activation PROD +- tag: am-vehicle-activation +- mzId: CD_am-vehicle-activation/management-zone/CDam-vehicle-activation.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-vehicle-activation-INT: +- name: CD_am-vehicle-activation INT +- tag: am-vehicle-activation +- mzId: CD_am-vehicle-activation/management-zone/CDam-vehicle-activation.id +- env: INT +- skipDeployment: "true" +#Configuration +CDam-vehicle-activation-INT.EMEA-PreProd: +- name: CD_am-vehicle-activation INT +- tag: am-vehicle-activation +- mzId: CD_am-vehicle-activation/management-zone/CDam-vehicle-activation.id +- env: INT +- skipDeployment: "false" +CDam-vehicle-activation-INT.NA-PreProd: +- name: CD_am-vehicle-activation INT +- tag: am-vehicle-activation +- mzId: CD_am-vehicle-activation/management-zone/CDam-vehicle-activation.id +- env: INT +- skipDeployment: "false" +CDam-vehicle-activation-INT.CN-PreProd: +- name: CD_am-vehicle-activation INT +- tag: am-vehicle-activation +- mzId: CD_am-vehicle-activation/management-zone/CDam-vehicle-activation.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vehicle-activation/alerting-profile/default.json b/BMW-Dynatrace-config/CD_am-vehicle-activation/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vehicle-activation/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vehicle-activation/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_am-vehicle-activation/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vehicle-activation/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vehicle-activation/custom-service-java/README.md b/BMW-Dynatrace-config/CD_am-vehicle-activation/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vehicle-activation/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vehicle-activation/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_am-vehicle-activation/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vehicle-activation/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vehicle-activation/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_am-vehicle-activation/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vehicle-activation/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vehicle-activation/dashboard/README.md b/BMW-Dynatrace-config/CD_am-vehicle-activation/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vehicle-activation/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vehicle-activation/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_am-vehicle-activation/dashboard/dashboard.yaml new file mode 100644 index 00000000..2fb54328 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vehicle-activation/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDam-vehicle-activation-PROD-E2E: defaultPRODE2E.json +- CDam-vehicle-activation-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDam-vehicle-activation-PROD-E2E: +- name: CD_am-vehicle-activation PROD-E2E +- mzName: CD_am-vehicle-activation/management-zone/CDam-vehicle-activation.name +- mzId: CD_am-vehicle-activation/management-zone/CDam-vehicle-activation.id +- skipDeployment: "true" +#Configuration +CDam-vehicle-activation-PROD-E2E.EMEA-Prod: +- name: CD_am-vehicle-activation PROD-E2E +- mzName: CD_am-vehicle-activation/management-zone/CDam-vehicle-activation.name +- mzId: CD_am-vehicle-activation/management-zone/CDam-vehicle-activation.id +- tag: am-vehicle-activation +- skipDeployment: "false" +CDam-vehicle-activation-PROD-E2E.NA-Prod: +- name: CD_am-vehicle-activation PROD-E2E +- mzName: CD_am-vehicle-activation/management-zone/CDam-vehicle-activation.name +- mzId: CD_am-vehicle-activation/management-zone/CDam-vehicle-activation.id +- tag: am-vehicle-activation +- skipDeployment: "false" +CDam-vehicle-activation-PROD-E2E.CN-Prod: +- name: CD_am-vehicle-activation PROD-E2E +- mzName: CD_am-vehicle-activation/management-zone/CDam-vehicle-activation.name +- mzId: CD_am-vehicle-activation/management-zone/CDam-vehicle-activation.id +- tag: am-vehicle-activation +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDam-vehicle-activation-INT-TEST: +- name: CD_am-vehicle-activation INT-TEST +- mzName: CD_am-vehicle-activation/management-zone/CDam-vehicle-activation.name +- mzId: CD_am-vehicle-activation/management-zone/CDam-vehicle-activation.id +- tag: am-vehicle-activation +- skipDeployment: "true" +#Configuration +CDam-vehicle-activation-INT-TEST.EMEA-PreProd: +- name: CD_am-vehicle-activation INT-TEST +- mzName: CD_am-vehicle-activation/management-zone/CDam-vehicle-activation.name +- mzId: CD_am-vehicle-activation/management-zone/CDam-vehicle-activation.id +- tag: am-vehicle-activation +- skipDeployment: "false" +CDam-vehicle-activation-INT-TEST.NA-PreProd: +- name: CD_am-vehicle-activation INT-TEST +- mzName: CD_am-vehicle-activation/management-zone/CDam-vehicle-activation.name +- mzId: CD_am-vehicle-activation/management-zone/CDam-vehicle-activation.id +- env: INT +- skipDeployment: "false" +CDam-vehicle-activation-INT-TEST.CN-PreProd: +- name: CD_am-vehicle-activation INT-TEST +- mzName: CD_am-vehicle-activation/management-zone/CDam-vehicle-activation.name +- mzId: CD_am-vehicle-activation/management-zone/CDam-vehicle-activation.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vehicle-activation/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_am-vehicle-activation/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vehicle-activation/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vehicle-activation/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_am-vehicle-activation/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vehicle-activation/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vehicle-activation/management-zone/README.md b/BMW-Dynatrace-config/CD_am-vehicle-activation/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vehicle-activation/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_am-vehicle-activation/management-zone/default.json b/BMW-Dynatrace-config/CD_am-vehicle-activation/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vehicle-activation/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vehicle-activation/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_am-vehicle-activation/management-zone/management-zone.yaml new file mode 100644 index 00000000..7c3c53fc --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vehicle-activation/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDam-vehicle-activation: default.json + +CDam-vehicle-activation: +- name: CD_am-vehicle-activation +- tag: am-vehicle-activation diff --git a/BMW-Dynatrace-config/CD_am-vehicle-activation/notification/README.md b/BMW-Dynatrace-config/CD_am-vehicle-activation/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vehicle-activation/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vehicle-activation/notification/email.json b/BMW-Dynatrace-config/CD_am-vehicle-activation/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vehicle-activation/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vehicle-activation/notification/msTeams.json b/BMW-Dynatrace-config/CD_am-vehicle-activation/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vehicle-activation/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vehicle-activation/notification/notification.yaml b/BMW-Dynatrace-config/CD_am-vehicle-activation/notification/notification.yaml new file mode 100644 index 00000000..d30c74b2 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vehicle-activation/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDam-vehicle-activation-PROD: msTeams.json +- CDam-vehicle-activation-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-vehicle-activation-PROD: +- name: CD_am-vehicle-activation PROD +- alertingProfile: CD_am-vehicle-activation/alerting-profile/CDam-vehicle-activation-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDam-vehicle-activation-PROD.EMEA-Prod: +- name: CD_am-vehicle-activation PROD +- alertingProfile: CD_am-vehicle-activation/alerting-profile/CDam-vehicle-activation-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDam-vehicle-activation-PROD.NA-Prod: +- name: CD_am-vehicle-activation PROD +- alertingProfile: CD_am-vehicle-activation/alerting-profile/CDam-vehicle-activation-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDam-vehicle-activation-PROD.CN-Prod: +- name: CD_am-vehicle-activation PROD +- alertingProfile: CD_am-vehicle-activation/alerting-profile/CDam-vehicle-activation-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-vehicle-activation-INT: +- name: CD_am-vehicle-activation INT +- alertingProfile: CD_am-vehicle-activation/alerting-profile/CDam-vehicle-activation-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDam-vehicle-activation-INT.EMEA-PreProd: +- name: CD_am-vehicle-activation INT +- alertingProfile: CD_am-vehicle-activation/alerting-profile/CDam-vehicle-activation-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDam-vehicle-activation-INT.NA-PreProd: +- name: CD_am-vehicle-activation INT +- alertingProfile: CD_am-vehicle-activation/alerting-profile/CDam-vehicle-activation-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDam-vehicle-activation-INT.CN-PreProd: +- name: CD_am-vehicle-activation INT +- alertingProfile: CD_am-vehicle-activation/alerting-profile/CDam-vehicle-activation-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vehicle-activation/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_am-vehicle-activation/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vehicle-activation/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vehicle-activation/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_am-vehicle-activation/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vehicle-activation/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vehicle-activation/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_am-vehicle-activation/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..cd25c519 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vehicle-activation/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- am-vehicle-activation: default.json + +am-vehicle-activation: +- name: CD_am-vehicle-activation - +- mzName: CD_am-vehicle-activation/management-zone/CDam-vehicle-activation.name +- mzId: CD_am-vehicle-activation/management-zone/CDam-vehicle-activation.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vms/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_am-vms/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..56c69e4e --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vms/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDam-vms-PROD: default.json +- CDam-vms-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-vms-PROD: +- name: CD_am-vms PROD +- tag: am-vms +- mzId: CD_am-vms/management-zone/CDam-vms.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDam-vms-PROD.EMEA-Prod: +- name: CD_am-vms PROD +- tag: am-vms +- mzId: CD_am-vms/management-zone/CDam-vms.id +- env: PROD +- skipDeployment: "false" +CDam-vms-PROD.NA-Prod: +- name: CD_am-vms PROD +- tag: am-vms +- mzId: CD_am-vms/management-zone/CDam-vms.id +- env: PROD +- skipDeployment: "false" +CDam-vms-PROD.CN-Prod: +- name: CD_am-vms PROD +- tag: am-vms +- mzId: CD_am-vms/management-zone/CDam-vms.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-vms-INT: +- name: CD_am-vms INT +- tag: am-vms +- mzId: CD_am-vms/management-zone/CDam-vms.id +- env: INT +- skipDeployment: "true" +#Configuration +CDam-vms-INT.EMEA-PreProd: +- name: CD_am-vms INT +- tag: am-vms +- mzId: CD_am-vms/management-zone/CDam-vms.id +- env: INT +- skipDeployment: "false" +CDam-vms-INT.NA-PreProd: +- name: CD_am-vms INT +- tag: am-vms +- mzId: CD_am-vms/management-zone/CDam-vms.id +- env: INT +- skipDeployment: "false" +CDam-vms-INT.CN-PreProd: +- name: CD_am-vms INT +- tag: am-vms +- mzId: CD_am-vms/management-zone/CDam-vms.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vms/alerting-profile/default.json b/BMW-Dynatrace-config/CD_am-vms/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vms/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vms/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_am-vms/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vms/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vms/custom-service-java/README.md b/BMW-Dynatrace-config/CD_am-vms/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vms/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vms/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_am-vms/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vms/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vms/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_am-vms/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vms/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vms/dashboard/README.md b/BMW-Dynatrace-config/CD_am-vms/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vms/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vms/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_am-vms/dashboard/dashboard.yaml new file mode 100644 index 00000000..081dfc7b --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vms/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDam-vms-PROD-E2E: defaultPRODE2E.json +- CDam-vms-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDam-vms-PROD-E2E: +- name: CD_am-vms PROD-E2E +- mzName: CD_am-vms/management-zone/CDam-vms.name +- mzId: CD_am-vms/management-zone/CDam-vms.id +- skipDeployment: "true" +#Configuration +CDam-vms-PROD-E2E.EMEA-Prod: +- name: CD_am-vms PROD-E2E +- mzName: CD_am-vms/management-zone/CDam-vms.name +- mzId: CD_am-vms/management-zone/CDam-vms.id +- tag: am-vms +- skipDeployment: "false" +CDam-vms-PROD-E2E.NA-Prod: +- name: CD_am-vms PROD-E2E +- mzName: CD_am-vms/management-zone/CDam-vms.name +- mzId: CD_am-vms/management-zone/CDam-vms.id +- tag: am-vms +- skipDeployment: "false" +CDam-vms-PROD-E2E.CN-Prod: +- name: CD_am-vms PROD-E2E +- mzName: CD_am-vms/management-zone/CDam-vms.name +- mzId: CD_am-vms/management-zone/CDam-vms.id +- tag: am-vms +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDam-vms-INT-TEST: +- name: CD_am-vms INT-TEST +- mzName: CD_am-vms/management-zone/CDam-vms.name +- mzId: CD_am-vms/management-zone/CDam-vms.id +- tag: am-vms +- skipDeployment: "true" +#Configuration +CDam-vms-INT-TEST.EMEA-PreProd: +- name: CD_am-vms INT-TEST +- mzName: CD_am-vms/management-zone/CDam-vms.name +- mzId: CD_am-vms/management-zone/CDam-vms.id +- tag: am-vms +- skipDeployment: "false" +CDam-vms-INT-TEST.NA-PreProd: +- name: CD_am-vms INT-TEST +- mzName: CD_am-vms/management-zone/CDam-vms.name +- mzId: CD_am-vms/management-zone/CDam-vms.id +- env: INT +- skipDeployment: "false" +CDam-vms-INT-TEST.CN-PreProd: +- name: CD_am-vms INT-TEST +- mzName: CD_am-vms/management-zone/CDam-vms.name +- mzId: CD_am-vms/management-zone/CDam-vms.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vms/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_am-vms/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vms/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vms/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_am-vms/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vms/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vms/management-zone/README.md b/BMW-Dynatrace-config/CD_am-vms/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vms/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_am-vms/management-zone/default.json b/BMW-Dynatrace-config/CD_am-vms/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vms/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vms/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_am-vms/management-zone/management-zone.yaml new file mode 100644 index 00000000..4fa82557 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vms/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDam-vms: default.json + +CDam-vms: +- name: CD_am-vms +- tag: am-vms diff --git a/BMW-Dynatrace-config/CD_am-vms/notification/README.md b/BMW-Dynatrace-config/CD_am-vms/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vms/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vms/notification/email.json b/BMW-Dynatrace-config/CD_am-vms/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vms/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vms/notification/msTeams.json b/BMW-Dynatrace-config/CD_am-vms/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vms/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vms/notification/notification.yaml b/BMW-Dynatrace-config/CD_am-vms/notification/notification.yaml new file mode 100644 index 00000000..45f49e4b --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vms/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDam-vms-PROD: msTeams.json +- CDam-vms-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-vms-PROD: +- name: CD_am-vms PROD +- alertingProfile: CD_am-vms/alerting-profile/CDam-vms-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDam-vms-PROD.EMEA-Prod: +- name: CD_am-vms PROD +- alertingProfile: CD_am-vms/alerting-profile/CDam-vms-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDam-vms-PROD.NA-Prod: +- name: CD_am-vms PROD +- alertingProfile: CD_am-vms/alerting-profile/CDam-vms-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDam-vms-PROD.CN-Prod: +- name: CD_am-vms PROD +- alertingProfile: CD_am-vms/alerting-profile/CDam-vms-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDam-vms-INT: +- name: CD_am-vms INT +- alertingProfile: CD_am-vms/alerting-profile/CDam-vms-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDam-vms-INT.EMEA-PreProd: +- name: CD_am-vms INT +- alertingProfile: CD_am-vms/alerting-profile/CDam-vms-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDam-vms-INT.NA-PreProd: +- name: CD_am-vms INT +- alertingProfile: CD_am-vms/alerting-profile/CDam-vms-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDam-vms-INT.CN-PreProd: +- name: CD_am-vms INT +- alertingProfile: CD_am-vms/alerting-profile/CDam-vms-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vms/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_am-vms/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vms/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vms/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_am-vms/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vms/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vms/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_am-vms/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..6c570ced --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vms/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- am-vms: default.json + +am-vms: +- name: CD_am-vms - +- mzName: CD_am-vms/management-zone/CDam-vms.name +- mzId: CD_am-vms/management-zone/CDam-vms.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_analytics-user-data-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_analytics-user-data-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..6b14f719 --- /dev/null +++ b/BMW-Dynatrace-config/CD_analytics-user-data-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDanalytics-user-data-service-PROD: default.json +- CDanalytics-user-data-service-E2E: default.json +- CDanalytics-user-data-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDanalytics-user-data-service-PROD: +- name: CD_analytics-user-data-service PROD +- tag: analytics-user-data-service +- mzId: CD_analytics-user-data-service/management-zone/CDanalytics-user-data-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDanalytics-user-data-service-PROD.EMEA-Prod: +- name: CD_analytics-user-data-service PROD +- tag: analytics-user-data-service +- mzId: CD_analytics-user-data-service/management-zone/CDanalytics-user-data-service.id +- env: PROD +- skipDeployment: "false" +CDanalytics-user-data-service-PROD.NA-Prod: +- name: CD_analytics-user-data-service PROD +- tag: analytics-user-data-service +- mzId: CD_analytics-user-data-service/management-zone/CDanalytics-user-data-service.id +- env: PROD +- skipDeployment: "false" +CDanalytics-user-data-service-PROD.CN-Prod: +- name: CD_analytics-user-data-service PROD +- tag: analytics-user-data-service +- mzId: CD_analytics-user-data-service/management-zone/CDanalytics-user-data-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDanalytics-user-data-service-E2E: +- name: CD_analytics-user-data-service E2E +- tag: analytics-user-data-service +- mzId: CD_analytics-user-data-service/management-zone/CDanalytics-user-data-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDanalytics-user-data-service-E2E.EMEA-Prod: +- name: CD_analytics-user-data-service E2E +- tag: analytics-user-data-service +- mzId: CD_analytics-user-data-service/management-zone/CDanalytics-user-data-service.id +- env: E2E +- skipDeployment: "false" +CDanalytics-user-data-service-E2E.NA-Prod: +- name: CD_analytics-user-data-service E2E +- tag: analytics-user-data-service +- mzId: CD_analytics-user-data-service/management-zone/CDanalytics-user-data-service.id +- env: E2E +- skipDeployment: "false" +CDanalytics-user-data-service-E2E.CN-Prod: +- name: CD_analytics-user-data-service E2E +- tag: analytics-user-data-service +- mzId: CD_analytics-user-data-service/management-zone/CDanalytics-user-data-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDanalytics-user-data-service-INT: +- name: CD_analytics-user-data-service INT +- tag: analytics-user-data-service +- mzId: CD_analytics-user-data-service/management-zone/CDanalytics-user-data-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDanalytics-user-data-service-INT.EMEA-PreProd: +- name: CD_analytics-user-data-service INT +- tag: analytics-user-data-service +- mzId: CD_analytics-user-data-service/management-zone/CDanalytics-user-data-service.id +- env: INT +- skipDeployment: "false" +CDanalytics-user-data-service-INT.NA-PreProd: +- name: CD_analytics-user-data-service INT +- tag: analytics-user-data-service +- mzId: CD_analytics-user-data-service/management-zone/CDanalytics-user-data-service.id +- env: INT +- skipDeployment: "false" +CDanalytics-user-data-service-INT.CN-PreProd: +- name: CD_analytics-user-data-service INT +- tag: analytics-user-data-service +- mzId: CD_analytics-user-data-service/management-zone/CDanalytics-user-data-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_analytics-user-data-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_analytics-user-data-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_analytics-user-data-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_analytics-user-data-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_analytics-user-data-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_analytics-user-data-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_analytics-user-data-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_analytics-user-data-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_analytics-user-data-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_analytics-user-data-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_analytics-user-data-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_analytics-user-data-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_analytics-user-data-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_analytics-user-data-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_analytics-user-data-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_analytics-user-data-service/dashboard/README.md b/BMW-Dynatrace-config/CD_analytics-user-data-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_analytics-user-data-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_analytics-user-data-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_analytics-user-data-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..6f1f0d11 --- /dev/null +++ b/BMW-Dynatrace-config/CD_analytics-user-data-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDanalytics-user-data-service-PROD-E2E: defaultPRODE2E.json +- CDanalytics-user-data-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDanalytics-user-data-service-PROD-E2E: +- name: CD_analytics-user-data-service PROD +- mzName: CD_analytics-user-data-service/management-zone/CDanalytics-user-data-service.name +- mzId: CD_analytics-user-data-service/management-zone/CDanalytics-user-data-service.id +- skipDeployment: "true" +#Configuration +CDanalytics-user-data-service-PROD-E2E.EMEA-Prod: +- name: CD_analytics-user-data-service PROD +- mzName: CD_analytics-user-data-service/management-zone/CDanalytics-user-data-service.name +- mzId: CD_analytics-user-data-service/management-zone/CDanalytics-user-data-service.id +- tag: analytics-user-data-service +- skipDeployment: "false" +CDanalytics-user-data-service-PROD-E2E.NA-Prod: +- name: CD_analytics-user-data-service PROD +- mzName: CD_analytics-user-data-service/management-zone/CDanalytics-user-data-service.name +- mzId: CD_analytics-user-data-service/management-zone/CDanalytics-user-data-service.id +- tag: analytics-user-data-service +- skipDeployment: "false" +CDanalytics-user-data-service-PROD-E2E.CN-Prod: +- name: CD_analytics-user-data-service PROD +- mzName: CD_analytics-user-data-service/management-zone/CDanalytics-user-data-service.name +- mzId: CD_analytics-user-data-service/management-zone/CDanalytics-user-data-service.id +- tag: analytics-user-data-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDanalytics-user-data-service-INT-TEST: +- name: CD_analytics-user-data-service INT-TEST +- mzName: CD_analytics-user-data-service/management-zone/CDanalytics-user-data-service.name +- mzId: CD_analytics-user-data-service/management-zone/CDanalytics-user-data-service.id +- tag: analytics-user-data-service +- skipDeployment: "true" +#Configuration +CDanalytics-user-data-service-INT-TEST.EMEA-PreProd: +- name: CD_analytics-user-data-service INT-TEST +- mzName: CD_analytics-user-data-service/management-zone/CDanalytics-user-data-service.name +- mzId: CD_analytics-user-data-service/management-zone/CDanalytics-user-data-service.id +- tag: analytics-user-data-service +- skipDeployment: "false" +CDanalytics-user-data-service-INT-TEST.NA-PreProd: +- name: CD_analytics-user-data-service INT-TEST +- mzName: CD_analytics-user-data-service/management-zone/CDanalytics-user-data-service.name +- mzId: CD_analytics-user-data-service/management-zone/CDanalytics-user-data-service.id +- env: INT +- skipDeployment: "false" +CDanalytics-user-data-service-INT-TEST.CN-PreProd: +- name: CD_analytics-user-data-service INT-TEST +- mzName: CD_analytics-user-data-service/management-zone/CDanalytics-user-data-service.name +- mzId: CD_analytics-user-data-service/management-zone/CDanalytics-user-data-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_analytics-user-data-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_analytics-user-data-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_analytics-user-data-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_analytics-user-data-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_analytics-user-data-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_analytics-user-data-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_analytics-user-data-service/management-zone/README.md b/BMW-Dynatrace-config/CD_analytics-user-data-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_analytics-user-data-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_analytics-user-data-service/management-zone/default.json b/BMW-Dynatrace-config/CD_analytics-user-data-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_analytics-user-data-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_analytics-user-data-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_analytics-user-data-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..df7c9cd7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_analytics-user-data-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDanalytics-user-data-service: default.json + +CDanalytics-user-data-service: +- name: CD_analytics-user-data-service +- tag: analytics-user-data-service diff --git a/BMW-Dynatrace-config/CD_analytics-user-data-service/notification/README.md b/BMW-Dynatrace-config/CD_analytics-user-data-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_analytics-user-data-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_analytics-user-data-service/notification/email.json b/BMW-Dynatrace-config/CD_analytics-user-data-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_analytics-user-data-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_analytics-user-data-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_analytics-user-data-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_analytics-user-data-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_analytics-user-data-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_analytics-user-data-service/notification/notification.yaml new file mode 100644 index 00000000..e584cc8d --- /dev/null +++ b/BMW-Dynatrace-config/CD_analytics-user-data-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDanalytics-user-data-service-PROD: msTeams.json +- CDanalytics-user-data-service-E2E: msTeams.json +- CDanalytics-user-data-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDanalytics-user-data-service-PROD: +- name: CD_analytics-user-data-service PROD +- alertingProfile: CD_analytics-user-data-service/alerting-profile/CDanalytics-user-data-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDanalytics-user-data-service-PROD.EMEA-Prod: +- name: CD_analytics-user-data-service PROD +- alertingProfile: CD_analytics-user-data-service/alerting-profile/CDanalytics-user-data-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDanalytics-user-data-service-PROD.NA-Prod: +- name: CD_analytics-user-data-service PROD +- alertingProfile: CD_analytics-user-data-service/alerting-profile/CDanalytics-user-data-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDanalytics-user-data-service-PROD.CN-Prod: +- name: CD_analytics-user-data-service PROD +- alertingProfile: CD_analytics-user-data-service/alerting-profile/CDanalytics-user-data-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDanalytics-user-data-service-E2E: +- name: CD_analytics-user-data-service E2E +- alertingProfile: CD_analytics-user-data-service/alerting-profile/CDanalytics-user-data-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDanalytics-user-data-service-E2E.EMEA-Prod: +- name: CD_analytics-user-data-service E2E +- alertingProfile: CD_analytics-user-data-service/alerting-profile/CDanalytics-user-data-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDanalytics-user-data-service-E2E.NA-Prod: +- name: CD_analytics-user-data-service E2E +- alertingProfile: CD_analytics-user-data-service/alerting-profile/CDanalytics-user-data-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDanalytics-user-data-service-E2E.CN-Prod: +- name: CD_analytics-user-data-service E2E +- alertingProfile: CD_analytics-user-data-service/alerting-profile/CDanalytics-user-data-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDanalytics-user-data-service-INT: +- name: CD_analytics-user-data-service INT +- alertingProfile: CD_analytics-user-data-service/alerting-profile/CDanalytics-user-data-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDanalytics-user-data-service-INT.EMEA-PreProd: +- name: CD_analytics-user-data-service INT +- alertingProfile: CD_analytics-user-data-service/alerting-profile/CDanalytics-user-data-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDanalytics-user-data-service-INT.NA-PreProd: +- name: CD_analytics-user-data-service INT +- alertingProfile: CD_analytics-user-data-service/alerting-profile/CDanalytics-user-data-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDanalytics-user-data-service-INT.CN-PreProd: +- name: CD_analytics-user-data-service INT +- alertingProfile: CD_analytics-user-data-service/alerting-profile/CDanalytics-user-data-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_analytics-user-data-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_analytics-user-data-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_analytics-user-data-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_analytics-user-data-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_analytics-user-data-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_analytics-user-data-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_analytics-user-data-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_analytics-user-data-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..c6554ebf --- /dev/null +++ b/BMW-Dynatrace-config/CD_analytics-user-data-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- analytics-user-data-service: default.json + +analytics-user-data-service: +- name: CD_analytics-user-data-service - +- mzName: CD_analytics-user-data-service/management-zone/CDanalytics-user-data-service.name +- mzId: CD_analytics-user-data-service/management-zone/CDanalytics-user-data-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..2a572ea7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDasbc-pki-oclisc2v-PROD: default.json +- CDasbc-pki-oclisc2v-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDasbc-pki-oclisc2v-PROD: +- name: CD_asbc-pki-oclisc2v PROD +- tag: asbc-pki-oclisc2v +- mzId: CD_asbc-pki-oclisc2v/management-zone/CDasbc-pki-oclisc2v.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDasbc-pki-oclisc2v-PROD.EMEA-Prod: +- name: CD_asbc-pki-oclisc2v PROD +- tag: asbc-pki-oclisc2v +- mzId: CD_asbc-pki-oclisc2v/management-zone/CDasbc-pki-oclisc2v.id +- env: PROD +- skipDeployment: "false" +CDasbc-pki-oclisc2v-PROD.NA-Prod: +- name: CD_asbc-pki-oclisc2v PROD +- tag: asbc-pki-oclisc2v +- mzId: CD_asbc-pki-oclisc2v/management-zone/CDasbc-pki-oclisc2v.id +- env: PROD +- skipDeployment: "false" +CDasbc-pki-oclisc2v-PROD.CN-Prod: +- name: CD_asbc-pki-oclisc2v PROD +- tag: asbc-pki-oclisc2v +- mzId: CD_asbc-pki-oclisc2v/management-zone/CDasbc-pki-oclisc2v.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDasbc-pki-oclisc2v-INT: +- name: CD_asbc-pki-oclisc2v INT +- tag: asbc-pki-oclisc2v +- mzId: CD_asbc-pki-oclisc2v/management-zone/CDasbc-pki-oclisc2v.id +- env: INT +- skipDeployment: "true" +#Configuration +CDasbc-pki-oclisc2v-INT.EMEA-PreProd: +- name: CD_asbc-pki-oclisc2v INT +- tag: asbc-pki-oclisc2v +- mzId: CD_asbc-pki-oclisc2v/management-zone/CDasbc-pki-oclisc2v.id +- env: INT +- skipDeployment: "false" +CDasbc-pki-oclisc2v-INT.NA-PreProd: +- name: CD_asbc-pki-oclisc2v INT +- tag: asbc-pki-oclisc2v +- mzId: CD_asbc-pki-oclisc2v/management-zone/CDasbc-pki-oclisc2v.id +- env: INT +- skipDeployment: "false" +CDasbc-pki-oclisc2v-INT.CN-PreProd: +- name: CD_asbc-pki-oclisc2v INT +- tag: asbc-pki-oclisc2v +- mzId: CD_asbc-pki-oclisc2v/management-zone/CDasbc-pki-oclisc2v.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/alerting-profile/default.json b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/custom-service-java/README.md b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/dashboard/README.md b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/dashboard/dashboard.yaml new file mode 100644 index 00000000..c2cd51c6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDasbc-pki-oclisc2v-PROD-E2E: defaultPRODE2E.json +- CDasbc-pki-oclisc2v-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDasbc-pki-oclisc2v-PROD-E2E: +- name: CD_asbc-pki-oclisc2v PROD-E2E +- mzName: CD_asbc-pki-oclisc2v/management-zone/CDasbc-pki-oclisc2v.name +- mzId: CD_asbc-pki-oclisc2v/management-zone/CDasbc-pki-oclisc2v.id +- skipDeployment: "true" +#Configuration +CDasbc-pki-oclisc2v-PROD-E2E.EMEA-Prod: +- name: CD_asbc-pki-oclisc2v PROD-E2E +- mzName: CD_asbc-pki-oclisc2v/management-zone/CDasbc-pki-oclisc2v.name +- mzId: CD_asbc-pki-oclisc2v/management-zone/CDasbc-pki-oclisc2v.id +- tag: asbc-pki-oclisc2v +- skipDeployment: "false" +CDasbc-pki-oclisc2v-PROD-E2E.NA-Prod: +- name: CD_asbc-pki-oclisc2v PROD-E2E +- mzName: CD_asbc-pki-oclisc2v/management-zone/CDasbc-pki-oclisc2v.name +- mzId: CD_asbc-pki-oclisc2v/management-zone/CDasbc-pki-oclisc2v.id +- tag: asbc-pki-oclisc2v +- skipDeployment: "false" +CDasbc-pki-oclisc2v-PROD-E2E.CN-Prod: +- name: CD_asbc-pki-oclisc2v PROD-E2E +- mzName: CD_asbc-pki-oclisc2v/management-zone/CDasbc-pki-oclisc2v.name +- mzId: CD_asbc-pki-oclisc2v/management-zone/CDasbc-pki-oclisc2v.id +- tag: asbc-pki-oclisc2v +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDasbc-pki-oclisc2v-INT-TEST: +- name: CD_asbc-pki-oclisc2v INT-TEST +- mzName: CD_asbc-pki-oclisc2v/management-zone/CDasbc-pki-oclisc2v.name +- mzId: CD_asbc-pki-oclisc2v/management-zone/CDasbc-pki-oclisc2v.id +- tag: asbc-pki-oclisc2v +- skipDeployment: "true" +#Configuration +CDasbc-pki-oclisc2v-INT-TEST.EMEA-PreProd: +- name: CD_asbc-pki-oclisc2v INT-TEST +- mzName: CD_asbc-pki-oclisc2v/management-zone/CDasbc-pki-oclisc2v.name +- mzId: CD_asbc-pki-oclisc2v/management-zone/CDasbc-pki-oclisc2v.id +- tag: asbc-pki-oclisc2v +- skipDeployment: "false" +CDasbc-pki-oclisc2v-INT-TEST.NA-PreProd: +- name: CD_asbc-pki-oclisc2v INT-TEST +- mzName: CD_asbc-pki-oclisc2v/management-zone/CDasbc-pki-oclisc2v.name +- mzId: CD_asbc-pki-oclisc2v/management-zone/CDasbc-pki-oclisc2v.id +- env: INT +- skipDeployment: "false" +CDasbc-pki-oclisc2v-INT-TEST.CN-PreProd: +- name: CD_asbc-pki-oclisc2v INT-TEST +- mzName: CD_asbc-pki-oclisc2v/management-zone/CDasbc-pki-oclisc2v.name +- mzId: CD_asbc-pki-oclisc2v/management-zone/CDasbc-pki-oclisc2v.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/management-zone/README.md b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/management-zone/default.json b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/management-zone/management-zone.yaml new file mode 100644 index 00000000..053c84e8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDasbc-pki-oclisc2v: default.json + +CDasbc-pki-oclisc2v: +- name: CD_asbc-pki-oclisc2v +- tag: asbc-pki-oclisc2v diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/notification/README.md b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/notification/email.json b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/notification/msTeams.json b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/notification/notification.yaml b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/notification/notification.yaml new file mode 100644 index 00000000..bcde484f --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDasbc-pki-oclisc2v-PROD: msTeams.json +- CDasbc-pki-oclisc2v-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDasbc-pki-oclisc2v-PROD: +- name: CD_asbc-pki-oclisc2v PROD +- alertingProfile: CD_asbc-pki-oclisc2v/alerting-profile/CDasbc-pki-oclisc2v-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDasbc-pki-oclisc2v-PROD.EMEA-Prod: +- name: CD_asbc-pki-oclisc2v PROD +- alertingProfile: CD_asbc-pki-oclisc2v/alerting-profile/CDasbc-pki-oclisc2v-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDasbc-pki-oclisc2v-PROD.NA-Prod: +- name: CD_asbc-pki-oclisc2v PROD +- alertingProfile: CD_asbc-pki-oclisc2v/alerting-profile/CDasbc-pki-oclisc2v-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDasbc-pki-oclisc2v-PROD.CN-Prod: +- name: CD_asbc-pki-oclisc2v PROD +- alertingProfile: CD_asbc-pki-oclisc2v/alerting-profile/CDasbc-pki-oclisc2v-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDasbc-pki-oclisc2v-INT: +- name: CD_asbc-pki-oclisc2v INT +- alertingProfile: CD_asbc-pki-oclisc2v/alerting-profile/CDasbc-pki-oclisc2v-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDasbc-pki-oclisc2v-INT.EMEA-PreProd: +- name: CD_asbc-pki-oclisc2v INT +- alertingProfile: CD_asbc-pki-oclisc2v/alerting-profile/CDasbc-pki-oclisc2v-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDasbc-pki-oclisc2v-INT.NA-PreProd: +- name: CD_asbc-pki-oclisc2v INT +- alertingProfile: CD_asbc-pki-oclisc2v/alerting-profile/CDasbc-pki-oclisc2v-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDasbc-pki-oclisc2v-INT.CN-PreProd: +- name: CD_asbc-pki-oclisc2v INT +- alertingProfile: CD_asbc-pki-oclisc2v/alerting-profile/CDasbc-pki-oclisc2v-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..6458cf11 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- asbc-pki-oclisc2v: default.json + +asbc-pki-oclisc2v: +- name: CD_asbc-pki-oclisc2v - +- mzName: CD_asbc-pki-oclisc2v/management-zone/CDasbc-pki-oclisc2v.name +- mzId: CD_asbc-pki-oclisc2v/management-zone/CDasbc-pki-oclisc2v.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..6b4c4961 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDasbc-pki-oclisocsp-PROD: default.json +- CDasbc-pki-oclisocsp-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDasbc-pki-oclisocsp-PROD: +- name: CD_asbc-pki-oclisocsp PROD +- tag: asbc-pki-oclisocsp +- mzId: CD_asbc-pki-oclisocsp/management-zone/CDasbc-pki-oclisocsp.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDasbc-pki-oclisocsp-PROD.EMEA-Prod: +- name: CD_asbc-pki-oclisocsp PROD +- tag: asbc-pki-oclisocsp +- mzId: CD_asbc-pki-oclisocsp/management-zone/CDasbc-pki-oclisocsp.id +- env: PROD +- skipDeployment: "false" +CDasbc-pki-oclisocsp-PROD.NA-Prod: +- name: CD_asbc-pki-oclisocsp PROD +- tag: asbc-pki-oclisocsp +- mzId: CD_asbc-pki-oclisocsp/management-zone/CDasbc-pki-oclisocsp.id +- env: PROD +- skipDeployment: "false" +CDasbc-pki-oclisocsp-PROD.CN-Prod: +- name: CD_asbc-pki-oclisocsp PROD +- tag: asbc-pki-oclisocsp +- mzId: CD_asbc-pki-oclisocsp/management-zone/CDasbc-pki-oclisocsp.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDasbc-pki-oclisocsp-INT: +- name: CD_asbc-pki-oclisocsp INT +- tag: asbc-pki-oclisocsp +- mzId: CD_asbc-pki-oclisocsp/management-zone/CDasbc-pki-oclisocsp.id +- env: INT +- skipDeployment: "true" +#Configuration +CDasbc-pki-oclisocsp-INT.EMEA-PreProd: +- name: CD_asbc-pki-oclisocsp INT +- tag: asbc-pki-oclisocsp +- mzId: CD_asbc-pki-oclisocsp/management-zone/CDasbc-pki-oclisocsp.id +- env: INT +- skipDeployment: "false" +CDasbc-pki-oclisocsp-INT.NA-PreProd: +- name: CD_asbc-pki-oclisocsp INT +- tag: asbc-pki-oclisocsp +- mzId: CD_asbc-pki-oclisocsp/management-zone/CDasbc-pki-oclisocsp.id +- env: INT +- skipDeployment: "false" +CDasbc-pki-oclisocsp-INT.CN-PreProd: +- name: CD_asbc-pki-oclisocsp INT +- tag: asbc-pki-oclisocsp +- mzId: CD_asbc-pki-oclisocsp/management-zone/CDasbc-pki-oclisocsp.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/alerting-profile/default.json b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/custom-service-java/README.md b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/dashboard/README.md b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/dashboard/dashboard.yaml new file mode 100644 index 00000000..75a75f38 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDasbc-pki-oclisocsp-PROD-E2E: defaultPRODE2E.json +- CDasbc-pki-oclisocsp-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDasbc-pki-oclisocsp-PROD-E2E: +- name: CD_asbc-pki-oclisocsp PROD-E2E +- mzName: CD_asbc-pki-oclisocsp/management-zone/CDasbc-pki-oclisocsp.name +- mzId: CD_asbc-pki-oclisocsp/management-zone/CDasbc-pki-oclisocsp.id +- skipDeployment: "true" +#Configuration +CDasbc-pki-oclisocsp-PROD-E2E.EMEA-Prod: +- name: CD_asbc-pki-oclisocsp PROD-E2E +- mzName: CD_asbc-pki-oclisocsp/management-zone/CDasbc-pki-oclisocsp.name +- mzId: CD_asbc-pki-oclisocsp/management-zone/CDasbc-pki-oclisocsp.id +- tag: asbc-pki-oclisocsp +- skipDeployment: "false" +CDasbc-pki-oclisocsp-PROD-E2E.NA-Prod: +- name: CD_asbc-pki-oclisocsp PROD-E2E +- mzName: CD_asbc-pki-oclisocsp/management-zone/CDasbc-pki-oclisocsp.name +- mzId: CD_asbc-pki-oclisocsp/management-zone/CDasbc-pki-oclisocsp.id +- tag: asbc-pki-oclisocsp +- skipDeployment: "false" +CDasbc-pki-oclisocsp-PROD-E2E.CN-Prod: +- name: CD_asbc-pki-oclisocsp PROD-E2E +- mzName: CD_asbc-pki-oclisocsp/management-zone/CDasbc-pki-oclisocsp.name +- mzId: CD_asbc-pki-oclisocsp/management-zone/CDasbc-pki-oclisocsp.id +- tag: asbc-pki-oclisocsp +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDasbc-pki-oclisocsp-INT-TEST: +- name: CD_asbc-pki-oclisocsp INT-TEST +- mzName: CD_asbc-pki-oclisocsp/management-zone/CDasbc-pki-oclisocsp.name +- mzId: CD_asbc-pki-oclisocsp/management-zone/CDasbc-pki-oclisocsp.id +- tag: asbc-pki-oclisocsp +- skipDeployment: "true" +#Configuration +CDasbc-pki-oclisocsp-INT-TEST.EMEA-PreProd: +- name: CD_asbc-pki-oclisocsp INT-TEST +- mzName: CD_asbc-pki-oclisocsp/management-zone/CDasbc-pki-oclisocsp.name +- mzId: CD_asbc-pki-oclisocsp/management-zone/CDasbc-pki-oclisocsp.id +- tag: asbc-pki-oclisocsp +- skipDeployment: "false" +CDasbc-pki-oclisocsp-INT-TEST.NA-PreProd: +- name: CD_asbc-pki-oclisocsp INT-TEST +- mzName: CD_asbc-pki-oclisocsp/management-zone/CDasbc-pki-oclisocsp.name +- mzId: CD_asbc-pki-oclisocsp/management-zone/CDasbc-pki-oclisocsp.id +- env: INT +- skipDeployment: "false" +CDasbc-pki-oclisocsp-INT-TEST.CN-PreProd: +- name: CD_asbc-pki-oclisocsp INT-TEST +- mzName: CD_asbc-pki-oclisocsp/management-zone/CDasbc-pki-oclisocsp.name +- mzId: CD_asbc-pki-oclisocsp/management-zone/CDasbc-pki-oclisocsp.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/management-zone/README.md b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/management-zone/default.json b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/management-zone/management-zone.yaml new file mode 100644 index 00000000..6debe15e --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDasbc-pki-oclisocsp: default.json + +CDasbc-pki-oclisocsp: +- name: CD_asbc-pki-oclisocsp +- tag: asbc-pki-oclisocsp diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/notification/README.md b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/notification/email.json b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/notification/msTeams.json b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/notification/notification.yaml b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/notification/notification.yaml new file mode 100644 index 00000000..8ae8d584 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDasbc-pki-oclisocsp-PROD: msTeams.json +- CDasbc-pki-oclisocsp-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDasbc-pki-oclisocsp-PROD: +- name: CD_asbc-pki-oclisocsp PROD +- alertingProfile: CD_asbc-pki-oclisocsp/alerting-profile/CDasbc-pki-oclisocsp-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDasbc-pki-oclisocsp-PROD.EMEA-Prod: +- name: CD_asbc-pki-oclisocsp PROD +- alertingProfile: CD_asbc-pki-oclisocsp/alerting-profile/CDasbc-pki-oclisocsp-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDasbc-pki-oclisocsp-PROD.NA-Prod: +- name: CD_asbc-pki-oclisocsp PROD +- alertingProfile: CD_asbc-pki-oclisocsp/alerting-profile/CDasbc-pki-oclisocsp-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDasbc-pki-oclisocsp-PROD.CN-Prod: +- name: CD_asbc-pki-oclisocsp PROD +- alertingProfile: CD_asbc-pki-oclisocsp/alerting-profile/CDasbc-pki-oclisocsp-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDasbc-pki-oclisocsp-INT: +- name: CD_asbc-pki-oclisocsp INT +- alertingProfile: CD_asbc-pki-oclisocsp/alerting-profile/CDasbc-pki-oclisocsp-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDasbc-pki-oclisocsp-INT.EMEA-PreProd: +- name: CD_asbc-pki-oclisocsp INT +- alertingProfile: CD_asbc-pki-oclisocsp/alerting-profile/CDasbc-pki-oclisocsp-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDasbc-pki-oclisocsp-INT.NA-PreProd: +- name: CD_asbc-pki-oclisocsp INT +- alertingProfile: CD_asbc-pki-oclisocsp/alerting-profile/CDasbc-pki-oclisocsp-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDasbc-pki-oclisocsp-INT.CN-PreProd: +- name: CD_asbc-pki-oclisocsp INT +- alertingProfile: CD_asbc-pki-oclisocsp/alerting-profile/CDasbc-pki-oclisocsp-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..965b2018 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- asbc-pki-oclisocsp: default.json + +asbc-pki-oclisocsp: +- name: CD_asbc-pki-oclisocsp - +- mzName: CD_asbc-pki-oclisocsp/management-zone/CDasbc-pki-oclisocsp.name +- mzId: CD_asbc-pki-oclisocsp/management-zone/CDasbc-pki-oclisocsp.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sfa-oh/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_asbc-sfa-oh/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..bf9ef2e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sfa-oh/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDasbc-sfa-oh-PROD: default.json +- CDasbc-sfa-oh-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDasbc-sfa-oh-PROD: +- name: CD_asbc-sfa-oh PROD +- tag: asbc-sfa-oh +- mzId: CD_asbc-sfa-oh/management-zone/CDasbc-sfa-oh.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDasbc-sfa-oh-PROD.EMEA-Prod: +- name: CD_asbc-sfa-oh PROD +- tag: asbc-sfa-oh +- mzId: CD_asbc-sfa-oh/management-zone/CDasbc-sfa-oh.id +- env: PROD +- skipDeployment: "false" +CDasbc-sfa-oh-PROD.NA-Prod: +- name: CD_asbc-sfa-oh PROD +- tag: asbc-sfa-oh +- mzId: CD_asbc-sfa-oh/management-zone/CDasbc-sfa-oh.id +- env: PROD +- skipDeployment: "false" +CDasbc-sfa-oh-PROD.CN-Prod: +- name: CD_asbc-sfa-oh PROD +- tag: asbc-sfa-oh +- mzId: CD_asbc-sfa-oh/management-zone/CDasbc-sfa-oh.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDasbc-sfa-oh-INT: +- name: CD_asbc-sfa-oh INT +- tag: asbc-sfa-oh +- mzId: CD_asbc-sfa-oh/management-zone/CDasbc-sfa-oh.id +- env: INT +- skipDeployment: "true" +#Configuration +CDasbc-sfa-oh-INT.EMEA-PreProd: +- name: CD_asbc-sfa-oh INT +- tag: asbc-sfa-oh +- mzId: CD_asbc-sfa-oh/management-zone/CDasbc-sfa-oh.id +- env: INT +- skipDeployment: "false" +CDasbc-sfa-oh-INT.NA-PreProd: +- name: CD_asbc-sfa-oh INT +- tag: asbc-sfa-oh +- mzId: CD_asbc-sfa-oh/management-zone/CDasbc-sfa-oh.id +- env: INT +- skipDeployment: "false" +CDasbc-sfa-oh-INT.CN-PreProd: +- name: CD_asbc-sfa-oh INT +- tag: asbc-sfa-oh +- mzId: CD_asbc-sfa-oh/management-zone/CDasbc-sfa-oh.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sfa-oh/alerting-profile/default.json b/BMW-Dynatrace-config/CD_asbc-sfa-oh/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sfa-oh/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sfa-oh/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_asbc-sfa-oh/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sfa-oh/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sfa-oh/custom-service-java/README.md b/BMW-Dynatrace-config/CD_asbc-sfa-oh/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sfa-oh/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sfa-oh/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_asbc-sfa-oh/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sfa-oh/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sfa-oh/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_asbc-sfa-oh/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sfa-oh/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sfa-oh/dashboard/README.md b/BMW-Dynatrace-config/CD_asbc-sfa-oh/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sfa-oh/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sfa-oh/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_asbc-sfa-oh/dashboard/dashboard.yaml new file mode 100644 index 00000000..1b15e668 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sfa-oh/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDasbc-sfa-oh-PROD-E2E: defaultPRODE2E.json +- CDasbc-sfa-oh-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDasbc-sfa-oh-PROD-E2E: +- name: CD_asbc-sfa-oh PROD-E2E +- mzName: CD_asbc-sfa-oh/management-zone/CDasbc-sfa-oh.name +- mzId: CD_asbc-sfa-oh/management-zone/CDasbc-sfa-oh.id +- skipDeployment: "true" +#Configuration +CDasbc-sfa-oh-PROD-E2E.EMEA-Prod: +- name: CD_asbc-sfa-oh PROD-E2E +- mzName: CD_asbc-sfa-oh/management-zone/CDasbc-sfa-oh.name +- mzId: CD_asbc-sfa-oh/management-zone/CDasbc-sfa-oh.id +- tag: asbc-sfa-oh +- skipDeployment: "false" +CDasbc-sfa-oh-PROD-E2E.NA-Prod: +- name: CD_asbc-sfa-oh PROD-E2E +- mzName: CD_asbc-sfa-oh/management-zone/CDasbc-sfa-oh.name +- mzId: CD_asbc-sfa-oh/management-zone/CDasbc-sfa-oh.id +- tag: asbc-sfa-oh +- skipDeployment: "false" +CDasbc-sfa-oh-PROD-E2E.CN-Prod: +- name: CD_asbc-sfa-oh PROD-E2E +- mzName: CD_asbc-sfa-oh/management-zone/CDasbc-sfa-oh.name +- mzId: CD_asbc-sfa-oh/management-zone/CDasbc-sfa-oh.id +- tag: asbc-sfa-oh +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDasbc-sfa-oh-INT-TEST: +- name: CD_asbc-sfa-oh INT-TEST +- mzName: CD_asbc-sfa-oh/management-zone/CDasbc-sfa-oh.name +- mzId: CD_asbc-sfa-oh/management-zone/CDasbc-sfa-oh.id +- tag: asbc-sfa-oh +- skipDeployment: "true" +#Configuration +CDasbc-sfa-oh-INT-TEST.EMEA-PreProd: +- name: CD_asbc-sfa-oh INT-TEST +- mzName: CD_asbc-sfa-oh/management-zone/CDasbc-sfa-oh.name +- mzId: CD_asbc-sfa-oh/management-zone/CDasbc-sfa-oh.id +- tag: asbc-sfa-oh +- skipDeployment: "false" +CDasbc-sfa-oh-INT-TEST.NA-PreProd: +- name: CD_asbc-sfa-oh INT-TEST +- mzName: CD_asbc-sfa-oh/management-zone/CDasbc-sfa-oh.name +- mzId: CD_asbc-sfa-oh/management-zone/CDasbc-sfa-oh.id +- env: INT +- skipDeployment: "false" +CDasbc-sfa-oh-INT-TEST.CN-PreProd: +- name: CD_asbc-sfa-oh INT-TEST +- mzName: CD_asbc-sfa-oh/management-zone/CDasbc-sfa-oh.name +- mzId: CD_asbc-sfa-oh/management-zone/CDasbc-sfa-oh.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sfa-oh/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_asbc-sfa-oh/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sfa-oh/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sfa-oh/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_asbc-sfa-oh/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sfa-oh/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sfa-oh/management-zone/README.md b/BMW-Dynatrace-config/CD_asbc-sfa-oh/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sfa-oh/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_asbc-sfa-oh/management-zone/default.json b/BMW-Dynatrace-config/CD_asbc-sfa-oh/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sfa-oh/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sfa-oh/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_asbc-sfa-oh/management-zone/management-zone.yaml new file mode 100644 index 00000000..681a4cfb --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sfa-oh/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDasbc-sfa-oh: default.json + +CDasbc-sfa-oh: +- name: CD_asbc-sfa-oh +- tag: asbc-sfa-oh diff --git a/BMW-Dynatrace-config/CD_asbc-sfa-oh/notification/README.md b/BMW-Dynatrace-config/CD_asbc-sfa-oh/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sfa-oh/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sfa-oh/notification/email.json b/BMW-Dynatrace-config/CD_asbc-sfa-oh/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sfa-oh/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sfa-oh/notification/msTeams.json b/BMW-Dynatrace-config/CD_asbc-sfa-oh/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sfa-oh/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sfa-oh/notification/notification.yaml b/BMW-Dynatrace-config/CD_asbc-sfa-oh/notification/notification.yaml new file mode 100644 index 00000000..0e36484b --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sfa-oh/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDasbc-sfa-oh-PROD: msTeams.json +- CDasbc-sfa-oh-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDasbc-sfa-oh-PROD: +- name: CD_asbc-sfa-oh PROD +- alertingProfile: CD_asbc-sfa-oh/alerting-profile/CDasbc-sfa-oh-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDasbc-sfa-oh-PROD.EMEA-Prod: +- name: CD_asbc-sfa-oh PROD +- alertingProfile: CD_asbc-sfa-oh/alerting-profile/CDasbc-sfa-oh-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDasbc-sfa-oh-PROD.NA-Prod: +- name: CD_asbc-sfa-oh PROD +- alertingProfile: CD_asbc-sfa-oh/alerting-profile/CDasbc-sfa-oh-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDasbc-sfa-oh-PROD.CN-Prod: +- name: CD_asbc-sfa-oh PROD +- alertingProfile: CD_asbc-sfa-oh/alerting-profile/CDasbc-sfa-oh-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDasbc-sfa-oh-INT: +- name: CD_asbc-sfa-oh INT +- alertingProfile: CD_asbc-sfa-oh/alerting-profile/CDasbc-sfa-oh-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDasbc-sfa-oh-INT.EMEA-PreProd: +- name: CD_asbc-sfa-oh INT +- alertingProfile: CD_asbc-sfa-oh/alerting-profile/CDasbc-sfa-oh-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDasbc-sfa-oh-INT.NA-PreProd: +- name: CD_asbc-sfa-oh INT +- alertingProfile: CD_asbc-sfa-oh/alerting-profile/CDasbc-sfa-oh-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDasbc-sfa-oh-INT.CN-PreProd: +- name: CD_asbc-sfa-oh INT +- alertingProfile: CD_asbc-sfa-oh/alerting-profile/CDasbc-sfa-oh-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sfa-oh/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_asbc-sfa-oh/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sfa-oh/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sfa-oh/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_asbc-sfa-oh/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sfa-oh/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sfa-oh/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_asbc-sfa-oh/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..a02a4fe2 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sfa-oh/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- asbc-sfa-oh: default.json + +asbc-sfa-oh: +- name: CD_asbc-sfa-oh - +- mzName: CD_asbc-sfa-oh/management-zone/CDasbc-sfa-oh.name +- mzId: CD_asbc-sfa-oh/management-zone/CDasbc-sfa-oh.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sts/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_asbc-sts/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..0921f11d --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sts/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDasbc-sts-PROD: default.json +- CDasbc-sts-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDasbc-sts-PROD: +- name: CD_asbc-sts PROD +- tag: asbc-sts +- mzId: CD_asbc-sts/management-zone/CDasbc-sts.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDasbc-sts-PROD.EMEA-Prod: +- name: CD_asbc-sts PROD +- tag: asbc-sts +- mzId: CD_asbc-sts/management-zone/CDasbc-sts.id +- env: PROD +- skipDeployment: "false" +CDasbc-sts-PROD.NA-Prod: +- name: CD_asbc-sts PROD +- tag: asbc-sts +- mzId: CD_asbc-sts/management-zone/CDasbc-sts.id +- env: PROD +- skipDeployment: "false" +CDasbc-sts-PROD.CN-Prod: +- name: CD_asbc-sts PROD +- tag: asbc-sts +- mzId: CD_asbc-sts/management-zone/CDasbc-sts.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDasbc-sts-INT: +- name: CD_asbc-sts INT +- tag: asbc-sts +- mzId: CD_asbc-sts/management-zone/CDasbc-sts.id +- env: INT +- skipDeployment: "true" +#Configuration +CDasbc-sts-INT.EMEA-PreProd: +- name: CD_asbc-sts INT +- tag: asbc-sts +- mzId: CD_asbc-sts/management-zone/CDasbc-sts.id +- env: INT +- skipDeployment: "false" +CDasbc-sts-INT.NA-PreProd: +- name: CD_asbc-sts INT +- tag: asbc-sts +- mzId: CD_asbc-sts/management-zone/CDasbc-sts.id +- env: INT +- skipDeployment: "false" +CDasbc-sts-INT.CN-PreProd: +- name: CD_asbc-sts INT +- tag: asbc-sts +- mzId: CD_asbc-sts/management-zone/CDasbc-sts.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sts/alerting-profile/default.json b/BMW-Dynatrace-config/CD_asbc-sts/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sts/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sts/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_asbc-sts/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sts/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sts/custom-service-java/README.md b/BMW-Dynatrace-config/CD_asbc-sts/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sts/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sts/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_asbc-sts/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sts/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sts/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_asbc-sts/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sts/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sts/dashboard/README.md b/BMW-Dynatrace-config/CD_asbc-sts/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sts/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sts/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_asbc-sts/dashboard/dashboard.yaml new file mode 100644 index 00000000..e0722b9d --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sts/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDasbc-sts-PROD-E2E: defaultPRODE2E.json +- CDasbc-sts-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDasbc-sts-PROD-E2E: +- name: CD_asbc-sts PROD-E2E +- mzName: CD_asbc-sts/management-zone/CDasbc-sts.name +- mzId: CD_asbc-sts/management-zone/CDasbc-sts.id +- skipDeployment: "true" +#Configuration +CDasbc-sts-PROD-E2E.EMEA-Prod: +- name: CD_asbc-sts PROD-E2E +- mzName: CD_asbc-sts/management-zone/CDasbc-sts.name +- mzId: CD_asbc-sts/management-zone/CDasbc-sts.id +- tag: asbc-sts +- skipDeployment: "false" +CDasbc-sts-PROD-E2E.NA-Prod: +- name: CD_asbc-sts PROD-E2E +- mzName: CD_asbc-sts/management-zone/CDasbc-sts.name +- mzId: CD_asbc-sts/management-zone/CDasbc-sts.id +- tag: asbc-sts +- skipDeployment: "false" +CDasbc-sts-PROD-E2E.CN-Prod: +- name: CD_asbc-sts PROD-E2E +- mzName: CD_asbc-sts/management-zone/CDasbc-sts.name +- mzId: CD_asbc-sts/management-zone/CDasbc-sts.id +- tag: asbc-sts +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDasbc-sts-INT-TEST: +- name: CD_asbc-sts INT-TEST +- mzName: CD_asbc-sts/management-zone/CDasbc-sts.name +- mzId: CD_asbc-sts/management-zone/CDasbc-sts.id +- tag: asbc-sts +- skipDeployment: "true" +#Configuration +CDasbc-sts-INT-TEST.EMEA-PreProd: +- name: CD_asbc-sts INT-TEST +- mzName: CD_asbc-sts/management-zone/CDasbc-sts.name +- mzId: CD_asbc-sts/management-zone/CDasbc-sts.id +- tag: asbc-sts +- skipDeployment: "false" +CDasbc-sts-INT-TEST.NA-PreProd: +- name: CD_asbc-sts INT-TEST +- mzName: CD_asbc-sts/management-zone/CDasbc-sts.name +- mzId: CD_asbc-sts/management-zone/CDasbc-sts.id +- env: INT +- skipDeployment: "false" +CDasbc-sts-INT-TEST.CN-PreProd: +- name: CD_asbc-sts INT-TEST +- mzName: CD_asbc-sts/management-zone/CDasbc-sts.name +- mzId: CD_asbc-sts/management-zone/CDasbc-sts.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sts/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_asbc-sts/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sts/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sts/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_asbc-sts/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sts/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sts/management-zone/README.md b/BMW-Dynatrace-config/CD_asbc-sts/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sts/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_asbc-sts/management-zone/default.json b/BMW-Dynatrace-config/CD_asbc-sts/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sts/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sts/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_asbc-sts/management-zone/management-zone.yaml new file mode 100644 index 00000000..f43854b1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sts/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDasbc-sts: default.json + +CDasbc-sts: +- name: CD_asbc-sts +- tag: asbc-sts diff --git a/BMW-Dynatrace-config/CD_asbc-sts/notification/README.md b/BMW-Dynatrace-config/CD_asbc-sts/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sts/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sts/notification/email.json b/BMW-Dynatrace-config/CD_asbc-sts/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sts/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sts/notification/msTeams.json b/BMW-Dynatrace-config/CD_asbc-sts/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sts/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sts/notification/notification.yaml b/BMW-Dynatrace-config/CD_asbc-sts/notification/notification.yaml new file mode 100644 index 00000000..82500f36 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sts/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDasbc-sts-PROD: msTeams.json +- CDasbc-sts-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDasbc-sts-PROD: +- name: CD_asbc-sts PROD +- alertingProfile: CD_asbc-sts/alerting-profile/CDasbc-sts-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDasbc-sts-PROD.EMEA-Prod: +- name: CD_asbc-sts PROD +- alertingProfile: CD_asbc-sts/alerting-profile/CDasbc-sts-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDasbc-sts-PROD.NA-Prod: +- name: CD_asbc-sts PROD +- alertingProfile: CD_asbc-sts/alerting-profile/CDasbc-sts-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDasbc-sts-PROD.CN-Prod: +- name: CD_asbc-sts PROD +- alertingProfile: CD_asbc-sts/alerting-profile/CDasbc-sts-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDasbc-sts-INT: +- name: CD_asbc-sts INT +- alertingProfile: CD_asbc-sts/alerting-profile/CDasbc-sts-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDasbc-sts-INT.EMEA-PreProd: +- name: CD_asbc-sts INT +- alertingProfile: CD_asbc-sts/alerting-profile/CDasbc-sts-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDasbc-sts-INT.NA-PreProd: +- name: CD_asbc-sts INT +- alertingProfile: CD_asbc-sts/alerting-profile/CDasbc-sts-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDasbc-sts-INT.CN-PreProd: +- name: CD_asbc-sts INT +- alertingProfile: CD_asbc-sts/alerting-profile/CDasbc-sts-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sts/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_asbc-sts/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sts/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sts/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_asbc-sts/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sts/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sts/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_asbc-sts/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..61e67bc6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sts/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- asbc-sts: default.json + +asbc-sts: +- name: CD_asbc-sts - +- mzName: CD_asbc-sts/management-zone/CDasbc-sts.name +- mzId: CD_asbc-sts/management-zone/CDasbc-sts.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbctvp/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_asbctvp/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..414cbbc4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbctvp/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDasbctvp-PROD: default.json +- CDasbctvp-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDasbctvp-PROD: +- name: CD_asbctvp PROD +- tag: asbctvp +- mzId: CD_asbctvp/management-zone/CDasbctvp.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDasbctvp-PROD.EMEA-Prod: +- name: CD_asbctvp PROD +- tag: asbctvp +- mzId: CD_asbctvp/management-zone/CDasbctvp.id +- env: PROD +- skipDeployment: "false" +CDasbctvp-PROD.NA-Prod: +- name: CD_asbctvp PROD +- tag: asbctvp +- mzId: CD_asbctvp/management-zone/CDasbctvp.id +- env: PROD +- skipDeployment: "false" +CDasbctvp-PROD.CN-Prod: +- name: CD_asbctvp PROD +- tag: asbctvp +- mzId: CD_asbctvp/management-zone/CDasbctvp.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDasbctvp-INT: +- name: CD_asbctvp INT +- tag: asbctvp +- mzId: CD_asbctvp/management-zone/CDasbctvp.id +- env: INT +- skipDeployment: "true" +#Configuration +CDasbctvp-INT.EMEA-PreProd: +- name: CD_asbctvp INT +- tag: asbctvp +- mzId: CD_asbctvp/management-zone/CDasbctvp.id +- env: INT +- skipDeployment: "false" +CDasbctvp-INT.NA-PreProd: +- name: CD_asbctvp INT +- tag: asbctvp +- mzId: CD_asbctvp/management-zone/CDasbctvp.id +- env: INT +- skipDeployment: "false" +CDasbctvp-INT.CN-PreProd: +- name: CD_asbctvp INT +- tag: asbctvp +- mzId: CD_asbctvp/management-zone/CDasbctvp.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbctvp/alerting-profile/default.json b/BMW-Dynatrace-config/CD_asbctvp/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbctvp/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbctvp/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_asbctvp/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbctvp/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbctvp/custom-service-java/README.md b/BMW-Dynatrace-config/CD_asbctvp/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbctvp/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbctvp/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_asbctvp/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbctvp/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbctvp/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_asbctvp/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbctvp/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbctvp/dashboard/README.md b/BMW-Dynatrace-config/CD_asbctvp/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbctvp/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbctvp/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_asbctvp/dashboard/dashboard.yaml new file mode 100644 index 00000000..98a7b659 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbctvp/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDasbctvp-PROD-E2E: defaultPRODE2E.json +- CDasbctvp-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDasbctvp-PROD-E2E: +- name: CD_asbctvp PROD-E2E +- mzName: CD_asbctvp/management-zone/CDasbctvp.name +- mzId: CD_asbctvp/management-zone/CDasbctvp.id +- skipDeployment: "true" +#Configuration +CDasbctvp-PROD-E2E.EMEA-Prod: +- name: CD_asbctvp PROD-E2E +- mzName: CD_asbctvp/management-zone/CDasbctvp.name +- mzId: CD_asbctvp/management-zone/CDasbctvp.id +- tag: asbctvp +- skipDeployment: "false" +CDasbctvp-PROD-E2E.NA-Prod: +- name: CD_asbctvp PROD-E2E +- mzName: CD_asbctvp/management-zone/CDasbctvp.name +- mzId: CD_asbctvp/management-zone/CDasbctvp.id +- tag: asbctvp +- skipDeployment: "false" +CDasbctvp-PROD-E2E.CN-Prod: +- name: CD_asbctvp PROD-E2E +- mzName: CD_asbctvp/management-zone/CDasbctvp.name +- mzId: CD_asbctvp/management-zone/CDasbctvp.id +- tag: asbctvp +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDasbctvp-INT-TEST: +- name: CD_asbctvp INT-TEST +- mzName: CD_asbctvp/management-zone/CDasbctvp.name +- mzId: CD_asbctvp/management-zone/CDasbctvp.id +- tag: asbctvp +- skipDeployment: "true" +#Configuration +CDasbctvp-INT-TEST.EMEA-PreProd: +- name: CD_asbctvp INT-TEST +- mzName: CD_asbctvp/management-zone/CDasbctvp.name +- mzId: CD_asbctvp/management-zone/CDasbctvp.id +- tag: asbctvp +- skipDeployment: "false" +CDasbctvp-INT-TEST.NA-PreProd: +- name: CD_asbctvp INT-TEST +- mzName: CD_asbctvp/management-zone/CDasbctvp.name +- mzId: CD_asbctvp/management-zone/CDasbctvp.id +- env: INT +- skipDeployment: "false" +CDasbctvp-INT-TEST.CN-PreProd: +- name: CD_asbctvp INT-TEST +- mzName: CD_asbctvp/management-zone/CDasbctvp.name +- mzId: CD_asbctvp/management-zone/CDasbctvp.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbctvp/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_asbctvp/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbctvp/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbctvp/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_asbctvp/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbctvp/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbctvp/management-zone/README.md b/BMW-Dynatrace-config/CD_asbctvp/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbctvp/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_asbctvp/management-zone/default.json b/BMW-Dynatrace-config/CD_asbctvp/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbctvp/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbctvp/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_asbctvp/management-zone/management-zone.yaml new file mode 100644 index 00000000..78bf594b --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbctvp/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDasbctvp: default.json + +CDasbctvp: +- name: CD_asbctvp +- tag: asbctvp diff --git a/BMW-Dynatrace-config/CD_asbctvp/notification/README.md b/BMW-Dynatrace-config/CD_asbctvp/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbctvp/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbctvp/notification/email.json b/BMW-Dynatrace-config/CD_asbctvp/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbctvp/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbctvp/notification/msTeams.json b/BMW-Dynatrace-config/CD_asbctvp/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbctvp/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbctvp/notification/notification.yaml b/BMW-Dynatrace-config/CD_asbctvp/notification/notification.yaml new file mode 100644 index 00000000..33ada20a --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbctvp/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDasbctvp-PROD: msTeams.json +- CDasbctvp-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDasbctvp-PROD: +- name: CD_asbctvp PROD +- alertingProfile: CD_asbctvp/alerting-profile/CDasbctvp-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDasbctvp-PROD.EMEA-Prod: +- name: CD_asbctvp PROD +- alertingProfile: CD_asbctvp/alerting-profile/CDasbctvp-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDasbctvp-PROD.NA-Prod: +- name: CD_asbctvp PROD +- alertingProfile: CD_asbctvp/alerting-profile/CDasbctvp-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDasbctvp-PROD.CN-Prod: +- name: CD_asbctvp PROD +- alertingProfile: CD_asbctvp/alerting-profile/CDasbctvp-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDasbctvp-INT: +- name: CD_asbctvp INT +- alertingProfile: CD_asbctvp/alerting-profile/CDasbctvp-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDasbctvp-INT.EMEA-PreProd: +- name: CD_asbctvp INT +- alertingProfile: CD_asbctvp/alerting-profile/CDasbctvp-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDasbctvp-INT.NA-PreProd: +- name: CD_asbctvp INT +- alertingProfile: CD_asbctvp/alerting-profile/CDasbctvp-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDasbctvp-INT.CN-PreProd: +- name: CD_asbctvp INT +- alertingProfile: CD_asbctvp/alerting-profile/CDasbctvp-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbctvp/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_asbctvp/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbctvp/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbctvp/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_asbctvp/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbctvp/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbctvp/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_asbctvp/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..daec90ea --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbctvp/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- asbctvp: default.json + +asbctvp: +- name: CD_asbctvp - +- mzName: CD_asbctvp/management-zone/CDasbctvp.name +- mzId: CD_asbctvp/management-zone/CDasbctvp.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-client-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_avs-client-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..45623ea9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-client-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDavs-client-service-PROD: default.json +- CDavs-client-service-E2E: default.json +- CDavs-client-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDavs-client-service-PROD: +- name: CD_avs-client-service PROD +- tag: avs-client-service +- mzId: CD_avs-client-service/management-zone/CDavs-client-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDavs-client-service-PROD.EMEA-Prod: +- name: CD_avs-client-service PROD +- tag: avs-client-service +- mzId: CD_avs-client-service/management-zone/CDavs-client-service.id +- env: PROD +- skipDeployment: "false" +CDavs-client-service-PROD.NA-Prod: +- name: CD_avs-client-service PROD +- tag: avs-client-service +- mzId: CD_avs-client-service/management-zone/CDavs-client-service.id +- env: PROD +- skipDeployment: "false" +CDavs-client-service-PROD.CN-Prod: +- name: CD_avs-client-service PROD +- tag: avs-client-service +- mzId: CD_avs-client-service/management-zone/CDavs-client-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDavs-client-service-E2E: +- name: CD_avs-client-service E2E +- tag: avs-client-service +- mzId: CD_avs-client-service/management-zone/CDavs-client-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDavs-client-service-E2E.EMEA-Prod: +- name: CD_avs-client-service E2E +- tag: avs-client-service +- mzId: CD_avs-client-service/management-zone/CDavs-client-service.id +- env: E2E +- skipDeployment: "false" +CDavs-client-service-E2E.NA-Prod: +- name: CD_avs-client-service E2E +- tag: avs-client-service +- mzId: CD_avs-client-service/management-zone/CDavs-client-service.id +- env: E2E +- skipDeployment: "false" +CDavs-client-service-E2E.CN-Prod: +- name: CD_avs-client-service E2E +- tag: avs-client-service +- mzId: CD_avs-client-service/management-zone/CDavs-client-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDavs-client-service-INT: +- name: CD_avs-client-service INT +- tag: avs-client-service +- mzId: CD_avs-client-service/management-zone/CDavs-client-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDavs-client-service-INT.EMEA-PreProd: +- name: CD_avs-client-service INT +- tag: avs-client-service +- mzId: CD_avs-client-service/management-zone/CDavs-client-service.id +- env: INT +- skipDeployment: "false" +CDavs-client-service-INT.NA-PreProd: +- name: CD_avs-client-service INT +- tag: avs-client-service +- mzId: CD_avs-client-service/management-zone/CDavs-client-service.id +- env: INT +- skipDeployment: "false" +CDavs-client-service-INT.CN-PreProd: +- name: CD_avs-client-service INT +- tag: avs-client-service +- mzId: CD_avs-client-service/management-zone/CDavs-client-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-client-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_avs-client-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-client-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-client-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_avs-client-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-client-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-client-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_avs-client-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-client-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-client-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_avs-client-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-client-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-client-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_avs-client-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-client-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-client-service/dashboard/README.md b/BMW-Dynatrace-config/CD_avs-client-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-client-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-client-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_avs-client-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..b61dccc7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-client-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDavs-client-service-PROD-E2E: defaultPRODE2E.json +- CDavs-client-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDavs-client-service-PROD-E2E: +- name: CD_avs-client-service PROD +- mzName: CD_avs-client-service/management-zone/CDavs-client-service.name +- mzId: CD_avs-client-service/management-zone/CDavs-client-service.id +- skipDeployment: "true" +#Configuration +CDavs-client-service-PROD-E2E.EMEA-Prod: +- name: CD_avs-client-service PROD +- mzName: CD_avs-client-service/management-zone/CDavs-client-service.name +- mzId: CD_avs-client-service/management-zone/CDavs-client-service.id +- tag: avs-client-service +- skipDeployment: "false" +CDavs-client-service-PROD-E2E.NA-Prod: +- name: CD_avs-client-service PROD +- mzName: CD_avs-client-service/management-zone/CDavs-client-service.name +- mzId: CD_avs-client-service/management-zone/CDavs-client-service.id +- tag: avs-client-service +- skipDeployment: "false" +CDavs-client-service-PROD-E2E.CN-Prod: +- name: CD_avs-client-service PROD +- mzName: CD_avs-client-service/management-zone/CDavs-client-service.name +- mzId: CD_avs-client-service/management-zone/CDavs-client-service.id +- tag: avs-client-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDavs-client-service-INT-TEST: +- name: CD_avs-client-service INT-TEST +- mzName: CD_avs-client-service/management-zone/CDavs-client-service.name +- mzId: CD_avs-client-service/management-zone/CDavs-client-service.id +- tag: avs-client-service +- skipDeployment: "true" +#Configuration +CDavs-client-service-INT-TEST.EMEA-PreProd: +- name: CD_avs-client-service INT-TEST +- mzName: CD_avs-client-service/management-zone/CDavs-client-service.name +- mzId: CD_avs-client-service/management-zone/CDavs-client-service.id +- tag: avs-client-service +- skipDeployment: "false" +CDavs-client-service-INT-TEST.NA-PreProd: +- name: CD_avs-client-service INT-TEST +- mzName: CD_avs-client-service/management-zone/CDavs-client-service.name +- mzId: CD_avs-client-service/management-zone/CDavs-client-service.id +- env: INT +- skipDeployment: "false" +CDavs-client-service-INT-TEST.CN-PreProd: +- name: CD_avs-client-service INT-TEST +- mzName: CD_avs-client-service/management-zone/CDavs-client-service.name +- mzId: CD_avs-client-service/management-zone/CDavs-client-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-client-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_avs-client-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-client-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-client-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_avs-client-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-client-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-client-service/management-zone/README.md b/BMW-Dynatrace-config/CD_avs-client-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-client-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_avs-client-service/management-zone/default.json b/BMW-Dynatrace-config/CD_avs-client-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-client-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-client-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_avs-client-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..24e2b7a9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-client-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDavs-client-service: default.json + +CDavs-client-service: +- name: CD_avs-client-service +- tag: avs-client-service diff --git a/BMW-Dynatrace-config/CD_avs-client-service/notification/README.md b/BMW-Dynatrace-config/CD_avs-client-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-client-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-client-service/notification/email.json b/BMW-Dynatrace-config/CD_avs-client-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-client-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-client-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_avs-client-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-client-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-client-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_avs-client-service/notification/notification.yaml new file mode 100644 index 00000000..ff280e98 --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-client-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDavs-client-service-PROD: msTeams.json +- CDavs-client-service-E2E: msTeams.json +- CDavs-client-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDavs-client-service-PROD: +- name: CD_avs-client-service PROD +- alertingProfile: CD_avs-client-service/alerting-profile/CDavs-client-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDavs-client-service-PROD.EMEA-Prod: +- name: CD_avs-client-service PROD +- alertingProfile: CD_avs-client-service/alerting-profile/CDavs-client-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDavs-client-service-PROD.NA-Prod: +- name: CD_avs-client-service PROD +- alertingProfile: CD_avs-client-service/alerting-profile/CDavs-client-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDavs-client-service-PROD.CN-Prod: +- name: CD_avs-client-service PROD +- alertingProfile: CD_avs-client-service/alerting-profile/CDavs-client-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDavs-client-service-E2E: +- name: CD_avs-client-service E2E +- alertingProfile: CD_avs-client-service/alerting-profile/CDavs-client-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDavs-client-service-E2E.EMEA-Prod: +- name: CD_avs-client-service E2E +- alertingProfile: CD_avs-client-service/alerting-profile/CDavs-client-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDavs-client-service-E2E.NA-Prod: +- name: CD_avs-client-service E2E +- alertingProfile: CD_avs-client-service/alerting-profile/CDavs-client-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDavs-client-service-E2E.CN-Prod: +- name: CD_avs-client-service E2E +- alertingProfile: CD_avs-client-service/alerting-profile/CDavs-client-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDavs-client-service-INT: +- name: CD_avs-client-service INT +- alertingProfile: CD_avs-client-service/alerting-profile/CDavs-client-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDavs-client-service-INT.EMEA-PreProd: +- name: CD_avs-client-service INT +- alertingProfile: CD_avs-client-service/alerting-profile/CDavs-client-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDavs-client-service-INT.NA-PreProd: +- name: CD_avs-client-service INT +- alertingProfile: CD_avs-client-service/alerting-profile/CDavs-client-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDavs-client-service-INT.CN-PreProd: +- name: CD_avs-client-service INT +- alertingProfile: CD_avs-client-service/alerting-profile/CDavs-client-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-client-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_avs-client-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-client-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-client-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_avs-client-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-client-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-client-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_avs-client-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..45f25267 --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-client-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- avs-client-service: default.json + +avs-client-service: +- name: CD_avs-client-service - +- mzName: CD_avs-client-service/management-zone/CDavs-client-service.name +- mzId: CD_avs-client-service/management-zone/CDavs-client-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-proxy-composite-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..7760906b --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDavs-proxy-composite-service-PROD: default.json +- CDavs-proxy-composite-service-E2E: default.json +- CDavs-proxy-composite-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDavs-proxy-composite-service-PROD: +- name: CD_avs-proxy-composite-service PROD +- tag: avs-proxy-composite-service +- mzId: CD_avs-proxy-composite-service/management-zone/CDavs-proxy-composite-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDavs-proxy-composite-service-PROD.EMEA-Prod: +- name: CD_avs-proxy-composite-service PROD +- tag: avs-proxy-composite-service +- mzId: CD_avs-proxy-composite-service/management-zone/CDavs-proxy-composite-service.id +- env: PROD +- skipDeployment: "false" +CDavs-proxy-composite-service-PROD.NA-Prod: +- name: CD_avs-proxy-composite-service PROD +- tag: avs-proxy-composite-service +- mzId: CD_avs-proxy-composite-service/management-zone/CDavs-proxy-composite-service.id +- env: PROD +- skipDeployment: "false" +CDavs-proxy-composite-service-PROD.CN-Prod: +- name: CD_avs-proxy-composite-service PROD +- tag: avs-proxy-composite-service +- mzId: CD_avs-proxy-composite-service/management-zone/CDavs-proxy-composite-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDavs-proxy-composite-service-E2E: +- name: CD_avs-proxy-composite-service E2E +- tag: avs-proxy-composite-service +- mzId: CD_avs-proxy-composite-service/management-zone/CDavs-proxy-composite-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDavs-proxy-composite-service-E2E.EMEA-Prod: +- name: CD_avs-proxy-composite-service E2E +- tag: avs-proxy-composite-service +- mzId: CD_avs-proxy-composite-service/management-zone/CDavs-proxy-composite-service.id +- env: E2E +- skipDeployment: "false" +CDavs-proxy-composite-service-E2E.NA-Prod: +- name: CD_avs-proxy-composite-service E2E +- tag: avs-proxy-composite-service +- mzId: CD_avs-proxy-composite-service/management-zone/CDavs-proxy-composite-service.id +- env: E2E +- skipDeployment: "false" +CDavs-proxy-composite-service-E2E.CN-Prod: +- name: CD_avs-proxy-composite-service E2E +- tag: avs-proxy-composite-service +- mzId: CD_avs-proxy-composite-service/management-zone/CDavs-proxy-composite-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDavs-proxy-composite-service-INT: +- name: CD_avs-proxy-composite-service INT +- tag: avs-proxy-composite-service +- mzId: CD_avs-proxy-composite-service/management-zone/CDavs-proxy-composite-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDavs-proxy-composite-service-INT.EMEA-PreProd: +- name: CD_avs-proxy-composite-service INT +- tag: avs-proxy-composite-service +- mzId: CD_avs-proxy-composite-service/management-zone/CDavs-proxy-composite-service.id +- env: INT +- skipDeployment: "false" +CDavs-proxy-composite-service-INT.NA-PreProd: +- name: CD_avs-proxy-composite-service INT +- tag: avs-proxy-composite-service +- mzId: CD_avs-proxy-composite-service/management-zone/CDavs-proxy-composite-service.id +- env: INT +- skipDeployment: "false" +CDavs-proxy-composite-service-INT.CN-PreProd: +- name: CD_avs-proxy-composite-service INT +- tag: avs-proxy-composite-service +- mzId: CD_avs-proxy-composite-service/management-zone/CDavs-proxy-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-proxy-composite-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-proxy-composite-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-proxy-composite-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-proxy-composite-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-proxy-composite-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-proxy-composite-service/dashboard/README.md b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-proxy-composite-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..670f8778 --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDavs-proxy-composite-service-PROD-E2E: defaultPRODE2E.json +- CDavs-proxy-composite-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDavs-proxy-composite-service-PROD-E2E: +- name: CD_avs-proxy-composite-service PROD +- mzName: CD_avs-proxy-composite-service/management-zone/CDavs-proxy-composite-service.name +- mzId: CD_avs-proxy-composite-service/management-zone/CDavs-proxy-composite-service.id +- skipDeployment: "true" +#Configuration +CDavs-proxy-composite-service-PROD-E2E.EMEA-Prod: +- name: CD_avs-proxy-composite-service PROD +- mzName: CD_avs-proxy-composite-service/management-zone/CDavs-proxy-composite-service.name +- mzId: CD_avs-proxy-composite-service/management-zone/CDavs-proxy-composite-service.id +- tag: avs-proxy-composite-service +- skipDeployment: "false" +CDavs-proxy-composite-service-PROD-E2E.NA-Prod: +- name: CD_avs-proxy-composite-service PROD +- mzName: CD_avs-proxy-composite-service/management-zone/CDavs-proxy-composite-service.name +- mzId: CD_avs-proxy-composite-service/management-zone/CDavs-proxy-composite-service.id +- tag: avs-proxy-composite-service +- skipDeployment: "false" +CDavs-proxy-composite-service-PROD-E2E.CN-Prod: +- name: CD_avs-proxy-composite-service PROD +- mzName: CD_avs-proxy-composite-service/management-zone/CDavs-proxy-composite-service.name +- mzId: CD_avs-proxy-composite-service/management-zone/CDavs-proxy-composite-service.id +- tag: avs-proxy-composite-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDavs-proxy-composite-service-INT-TEST: +- name: CD_avs-proxy-composite-service INT-TEST +- mzName: CD_avs-proxy-composite-service/management-zone/CDavs-proxy-composite-service.name +- mzId: CD_avs-proxy-composite-service/management-zone/CDavs-proxy-composite-service.id +- tag: avs-proxy-composite-service +- skipDeployment: "true" +#Configuration +CDavs-proxy-composite-service-INT-TEST.EMEA-PreProd: +- name: CD_avs-proxy-composite-service INT-TEST +- mzName: CD_avs-proxy-composite-service/management-zone/CDavs-proxy-composite-service.name +- mzId: CD_avs-proxy-composite-service/management-zone/CDavs-proxy-composite-service.id +- tag: avs-proxy-composite-service +- skipDeployment: "false" +CDavs-proxy-composite-service-INT-TEST.NA-PreProd: +- name: CD_avs-proxy-composite-service INT-TEST +- mzName: CD_avs-proxy-composite-service/management-zone/CDavs-proxy-composite-service.name +- mzId: CD_avs-proxy-composite-service/management-zone/CDavs-proxy-composite-service.id +- env: INT +- skipDeployment: "false" +CDavs-proxy-composite-service-INT-TEST.CN-PreProd: +- name: CD_avs-proxy-composite-service INT-TEST +- mzName: CD_avs-proxy-composite-service/management-zone/CDavs-proxy-composite-service.name +- mzId: CD_avs-proxy-composite-service/management-zone/CDavs-proxy-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-proxy-composite-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-proxy-composite-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-proxy-composite-service/management-zone/README.md b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_avs-proxy-composite-service/management-zone/default.json b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-proxy-composite-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..bcdd4813 --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDavs-proxy-composite-service: default.json + +CDavs-proxy-composite-service: +- name: CD_avs-proxy-composite-service +- tag: avs-proxy-composite-service diff --git a/BMW-Dynatrace-config/CD_avs-proxy-composite-service/notification/README.md b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-proxy-composite-service/notification/email.json b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-proxy-composite-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-proxy-composite-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/notification/notification.yaml new file mode 100644 index 00000000..ca183178 --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDavs-proxy-composite-service-PROD: msTeams.json +- CDavs-proxy-composite-service-E2E: msTeams.json +- CDavs-proxy-composite-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDavs-proxy-composite-service-PROD: +- name: CD_avs-proxy-composite-service PROD +- alertingProfile: CD_avs-proxy-composite-service/alerting-profile/CDavs-proxy-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDavs-proxy-composite-service-PROD.EMEA-Prod: +- name: CD_avs-proxy-composite-service PROD +- alertingProfile: CD_avs-proxy-composite-service/alerting-profile/CDavs-proxy-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDavs-proxy-composite-service-PROD.NA-Prod: +- name: CD_avs-proxy-composite-service PROD +- alertingProfile: CD_avs-proxy-composite-service/alerting-profile/CDavs-proxy-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDavs-proxy-composite-service-PROD.CN-Prod: +- name: CD_avs-proxy-composite-service PROD +- alertingProfile: CD_avs-proxy-composite-service/alerting-profile/CDavs-proxy-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDavs-proxy-composite-service-E2E: +- name: CD_avs-proxy-composite-service E2E +- alertingProfile: CD_avs-proxy-composite-service/alerting-profile/CDavs-proxy-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDavs-proxy-composite-service-E2E.EMEA-Prod: +- name: CD_avs-proxy-composite-service E2E +- alertingProfile: CD_avs-proxy-composite-service/alerting-profile/CDavs-proxy-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDavs-proxy-composite-service-E2E.NA-Prod: +- name: CD_avs-proxy-composite-service E2E +- alertingProfile: CD_avs-proxy-composite-service/alerting-profile/CDavs-proxy-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDavs-proxy-composite-service-E2E.CN-Prod: +- name: CD_avs-proxy-composite-service E2E +- alertingProfile: CD_avs-proxy-composite-service/alerting-profile/CDavs-proxy-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDavs-proxy-composite-service-INT: +- name: CD_avs-proxy-composite-service INT +- alertingProfile: CD_avs-proxy-composite-service/alerting-profile/CDavs-proxy-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDavs-proxy-composite-service-INT.EMEA-PreProd: +- name: CD_avs-proxy-composite-service INT +- alertingProfile: CD_avs-proxy-composite-service/alerting-profile/CDavs-proxy-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDavs-proxy-composite-service-INT.NA-PreProd: +- name: CD_avs-proxy-composite-service INT +- alertingProfile: CD_avs-proxy-composite-service/alerting-profile/CDavs-proxy-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDavs-proxy-composite-service-INT.CN-PreProd: +- name: CD_avs-proxy-composite-service INT +- alertingProfile: CD_avs-proxy-composite-service/alerting-profile/CDavs-proxy-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-proxy-composite-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-proxy-composite-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-proxy-composite-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..5cce1f5c --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- avs-proxy-composite-service: default.json + +avs-proxy-composite-service: +- name: CD_avs-proxy-composite-service - +- mzName: CD_avs-proxy-composite-service/management-zone/CDavs-proxy-composite-service.name +- mzId: CD_avs-proxy-composite-service/management-zone/CDavs-proxy-composite-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-be/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_b2v-com-be/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..263c4a4c --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-be/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDb2v-com-be-PROD: default.json +- CDb2v-com-be-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDb2v-com-be-PROD: +- name: CD_b2v-com-be PROD +- tag: b2v-com-be +- mzId: CD_b2v-com-be/management-zone/CDb2v-com-be.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDb2v-com-be-PROD.EMEA-Prod: +- name: CD_b2v-com-be PROD +- tag: b2v-com-be +- mzId: CD_b2v-com-be/management-zone/CDb2v-com-be.id +- env: PROD +- skipDeployment: "false" +CDb2v-com-be-PROD.NA-Prod: +- name: CD_b2v-com-be PROD +- tag: b2v-com-be +- mzId: CD_b2v-com-be/management-zone/CDb2v-com-be.id +- env: PROD +- skipDeployment: "false" +CDb2v-com-be-PROD.CN-Prod: +- name: CD_b2v-com-be PROD +- tag: b2v-com-be +- mzId: CD_b2v-com-be/management-zone/CDb2v-com-be.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDb2v-com-be-INT: +- name: CD_b2v-com-be INT +- tag: b2v-com-be +- mzId: CD_b2v-com-be/management-zone/CDb2v-com-be.id +- env: INT +- skipDeployment: "true" +#Configuration +CDb2v-com-be-INT.EMEA-PreProd: +- name: CD_b2v-com-be INT +- tag: b2v-com-be +- mzId: CD_b2v-com-be/management-zone/CDb2v-com-be.id +- env: INT +- skipDeployment: "false" +CDb2v-com-be-INT.NA-PreProd: +- name: CD_b2v-com-be INT +- tag: b2v-com-be +- mzId: CD_b2v-com-be/management-zone/CDb2v-com-be.id +- env: INT +- skipDeployment: "false" +CDb2v-com-be-INT.CN-PreProd: +- name: CD_b2v-com-be INT +- tag: b2v-com-be +- mzId: CD_b2v-com-be/management-zone/CDb2v-com-be.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-be/alerting-profile/default.json b/BMW-Dynatrace-config/CD_b2v-com-be/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-be/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-be/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_b2v-com-be/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-be/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-be/custom-service-java/README.md b/BMW-Dynatrace-config/CD_b2v-com-be/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-be/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-be/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_b2v-com-be/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-be/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-be/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_b2v-com-be/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-be/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-be/dashboard/README.md b/BMW-Dynatrace-config/CD_b2v-com-be/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-be/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-be/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_b2v-com-be/dashboard/dashboard.yaml new file mode 100644 index 00000000..b00af603 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-be/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDb2v-com-be-PROD-E2E: defaultPRODE2E.json +- CDb2v-com-be-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDb2v-com-be-PROD-E2E: +- name: CD_b2v-com-be PROD-E2E +- mzName: CD_b2v-com-be/management-zone/CDb2v-com-be.name +- mzId: CD_b2v-com-be/management-zone/CDb2v-com-be.id +- skipDeployment: "true" +#Configuration +CDb2v-com-be-PROD-E2E.EMEA-Prod: +- name: CD_b2v-com-be PROD-E2E +- mzName: CD_b2v-com-be/management-zone/CDb2v-com-be.name +- mzId: CD_b2v-com-be/management-zone/CDb2v-com-be.id +- tag: b2v-com-be +- skipDeployment: "false" +CDb2v-com-be-PROD-E2E.NA-Prod: +- name: CD_b2v-com-be PROD-E2E +- mzName: CD_b2v-com-be/management-zone/CDb2v-com-be.name +- mzId: CD_b2v-com-be/management-zone/CDb2v-com-be.id +- tag: b2v-com-be +- skipDeployment: "false" +CDb2v-com-be-PROD-E2E.CN-Prod: +- name: CD_b2v-com-be PROD-E2E +- mzName: CD_b2v-com-be/management-zone/CDb2v-com-be.name +- mzId: CD_b2v-com-be/management-zone/CDb2v-com-be.id +- tag: b2v-com-be +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDb2v-com-be-INT-TEST: +- name: CD_b2v-com-be INT-TEST +- mzName: CD_b2v-com-be/management-zone/CDb2v-com-be.name +- mzId: CD_b2v-com-be/management-zone/CDb2v-com-be.id +- tag: b2v-com-be +- skipDeployment: "true" +#Configuration +CDb2v-com-be-INT-TEST.EMEA-PreProd: +- name: CD_b2v-com-be INT-TEST +- mzName: CD_b2v-com-be/management-zone/CDb2v-com-be.name +- mzId: CD_b2v-com-be/management-zone/CDb2v-com-be.id +- tag: b2v-com-be +- skipDeployment: "false" +CDb2v-com-be-INT-TEST.NA-PreProd: +- name: CD_b2v-com-be INT-TEST +- mzName: CD_b2v-com-be/management-zone/CDb2v-com-be.name +- mzId: CD_b2v-com-be/management-zone/CDb2v-com-be.id +- env: INT +- skipDeployment: "false" +CDb2v-com-be-INT-TEST.CN-PreProd: +- name: CD_b2v-com-be INT-TEST +- mzName: CD_b2v-com-be/management-zone/CDb2v-com-be.name +- mzId: CD_b2v-com-be/management-zone/CDb2v-com-be.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-be/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_b2v-com-be/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-be/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-be/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_b2v-com-be/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-be/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-be/management-zone/README.md b/BMW-Dynatrace-config/CD_b2v-com-be/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-be/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_b2v-com-be/management-zone/default.json b/BMW-Dynatrace-config/CD_b2v-com-be/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-be/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-be/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_b2v-com-be/management-zone/management-zone.yaml new file mode 100644 index 00000000..cce98a84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-be/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDb2v-com-be: default.json + +CDb2v-com-be: +- name: CD_b2v-com-be +- tag: b2v-com-be diff --git a/BMW-Dynatrace-config/CD_b2v-com-be/notification/README.md b/BMW-Dynatrace-config/CD_b2v-com-be/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-be/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-be/notification/email.json b/BMW-Dynatrace-config/CD_b2v-com-be/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-be/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-be/notification/msTeams.json b/BMW-Dynatrace-config/CD_b2v-com-be/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-be/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-be/notification/notification.yaml b/BMW-Dynatrace-config/CD_b2v-com-be/notification/notification.yaml new file mode 100644 index 00000000..880c7fac --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-be/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDb2v-com-be-PROD: msTeams.json +- CDb2v-com-be-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDb2v-com-be-PROD: +- name: CD_b2v-com-be PROD +- alertingProfile: CD_b2v-com-be/alerting-profile/CDb2v-com-be-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDb2v-com-be-PROD.EMEA-Prod: +- name: CD_b2v-com-be PROD +- alertingProfile: CD_b2v-com-be/alerting-profile/CDb2v-com-be-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDb2v-com-be-PROD.NA-Prod: +- name: CD_b2v-com-be PROD +- alertingProfile: CD_b2v-com-be/alerting-profile/CDb2v-com-be-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDb2v-com-be-PROD.CN-Prod: +- name: CD_b2v-com-be PROD +- alertingProfile: CD_b2v-com-be/alerting-profile/CDb2v-com-be-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDb2v-com-be-INT: +- name: CD_b2v-com-be INT +- alertingProfile: CD_b2v-com-be/alerting-profile/CDb2v-com-be-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDb2v-com-be-INT.EMEA-PreProd: +- name: CD_b2v-com-be INT +- alertingProfile: CD_b2v-com-be/alerting-profile/CDb2v-com-be-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDb2v-com-be-INT.NA-PreProd: +- name: CD_b2v-com-be INT +- alertingProfile: CD_b2v-com-be/alerting-profile/CDb2v-com-be-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDb2v-com-be-INT.CN-PreProd: +- name: CD_b2v-com-be INT +- alertingProfile: CD_b2v-com-be/alerting-profile/CDb2v-com-be-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-be/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_b2v-com-be/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-be/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-be/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_b2v-com-be/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-be/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-be/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_b2v-com-be/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..c999da7f --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-be/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- b2v-com-be: default.json + +b2v-com-be: +- name: CD_b2v-com-be - +- mzName: CD_b2v-com-be/management-zone/CDb2v-com-be.name +- mzId: CD_b2v-com-be/management-zone/CDb2v-com-be.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-echo/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_b2v-com-echo/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..5830f9ab --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-echo/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDb2v-com-echo-PROD: default.json +- CDb2v-com-echo-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDb2v-com-echo-PROD: +- name: CD_b2v-com-echo PROD +- tag: b2v-com-echo +- mzId: CD_b2v-com-echo/management-zone/CDb2v-com-echo.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDb2v-com-echo-PROD.EMEA-Prod: +- name: CD_b2v-com-echo PROD +- tag: b2v-com-echo +- mzId: CD_b2v-com-echo/management-zone/CDb2v-com-echo.id +- env: PROD +- skipDeployment: "false" +CDb2v-com-echo-PROD.NA-Prod: +- name: CD_b2v-com-echo PROD +- tag: b2v-com-echo +- mzId: CD_b2v-com-echo/management-zone/CDb2v-com-echo.id +- env: PROD +- skipDeployment: "false" +CDb2v-com-echo-PROD.CN-Prod: +- name: CD_b2v-com-echo PROD +- tag: b2v-com-echo +- mzId: CD_b2v-com-echo/management-zone/CDb2v-com-echo.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDb2v-com-echo-INT: +- name: CD_b2v-com-echo INT +- tag: b2v-com-echo +- mzId: CD_b2v-com-echo/management-zone/CDb2v-com-echo.id +- env: INT +- skipDeployment: "true" +#Configuration +CDb2v-com-echo-INT.EMEA-PreProd: +- name: CD_b2v-com-echo INT +- tag: b2v-com-echo +- mzId: CD_b2v-com-echo/management-zone/CDb2v-com-echo.id +- env: INT +- skipDeployment: "false" +CDb2v-com-echo-INT.NA-PreProd: +- name: CD_b2v-com-echo INT +- tag: b2v-com-echo +- mzId: CD_b2v-com-echo/management-zone/CDb2v-com-echo.id +- env: INT +- skipDeployment: "false" +CDb2v-com-echo-INT.CN-PreProd: +- name: CD_b2v-com-echo INT +- tag: b2v-com-echo +- mzId: CD_b2v-com-echo/management-zone/CDb2v-com-echo.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-echo/alerting-profile/default.json b/BMW-Dynatrace-config/CD_b2v-com-echo/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-echo/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-echo/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_b2v-com-echo/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-echo/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-echo/custom-service-java/README.md b/BMW-Dynatrace-config/CD_b2v-com-echo/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-echo/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-echo/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_b2v-com-echo/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-echo/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-echo/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_b2v-com-echo/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-echo/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-echo/dashboard/README.md b/BMW-Dynatrace-config/CD_b2v-com-echo/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-echo/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-echo/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_b2v-com-echo/dashboard/dashboard.yaml new file mode 100644 index 00000000..3a51285b --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-echo/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDb2v-com-echo-PROD-E2E: defaultPRODE2E.json +- CDb2v-com-echo-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDb2v-com-echo-PROD-E2E: +- name: CD_b2v-com-echo PROD-E2E +- mzName: CD_b2v-com-echo/management-zone/CDb2v-com-echo.name +- mzId: CD_b2v-com-echo/management-zone/CDb2v-com-echo.id +- skipDeployment: "true" +#Configuration +CDb2v-com-echo-PROD-E2E.EMEA-Prod: +- name: CD_b2v-com-echo PROD-E2E +- mzName: CD_b2v-com-echo/management-zone/CDb2v-com-echo.name +- mzId: CD_b2v-com-echo/management-zone/CDb2v-com-echo.id +- tag: b2v-com-echo +- skipDeployment: "false" +CDb2v-com-echo-PROD-E2E.NA-Prod: +- name: CD_b2v-com-echo PROD-E2E +- mzName: CD_b2v-com-echo/management-zone/CDb2v-com-echo.name +- mzId: CD_b2v-com-echo/management-zone/CDb2v-com-echo.id +- tag: b2v-com-echo +- skipDeployment: "false" +CDb2v-com-echo-PROD-E2E.CN-Prod: +- name: CD_b2v-com-echo PROD-E2E +- mzName: CD_b2v-com-echo/management-zone/CDb2v-com-echo.name +- mzId: CD_b2v-com-echo/management-zone/CDb2v-com-echo.id +- tag: b2v-com-echo +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDb2v-com-echo-INT-TEST: +- name: CD_b2v-com-echo INT-TEST +- mzName: CD_b2v-com-echo/management-zone/CDb2v-com-echo.name +- mzId: CD_b2v-com-echo/management-zone/CDb2v-com-echo.id +- tag: b2v-com-echo +- skipDeployment: "true" +#Configuration +CDb2v-com-echo-INT-TEST.EMEA-PreProd: +- name: CD_b2v-com-echo INT-TEST +- mzName: CD_b2v-com-echo/management-zone/CDb2v-com-echo.name +- mzId: CD_b2v-com-echo/management-zone/CDb2v-com-echo.id +- tag: b2v-com-echo +- skipDeployment: "false" +CDb2v-com-echo-INT-TEST.NA-PreProd: +- name: CD_b2v-com-echo INT-TEST +- mzName: CD_b2v-com-echo/management-zone/CDb2v-com-echo.name +- mzId: CD_b2v-com-echo/management-zone/CDb2v-com-echo.id +- env: INT +- skipDeployment: "false" +CDb2v-com-echo-INT-TEST.CN-PreProd: +- name: CD_b2v-com-echo INT-TEST +- mzName: CD_b2v-com-echo/management-zone/CDb2v-com-echo.name +- mzId: CD_b2v-com-echo/management-zone/CDb2v-com-echo.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-echo/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_b2v-com-echo/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-echo/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-echo/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_b2v-com-echo/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-echo/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-echo/management-zone/README.md b/BMW-Dynatrace-config/CD_b2v-com-echo/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-echo/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_b2v-com-echo/management-zone/default.json b/BMW-Dynatrace-config/CD_b2v-com-echo/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-echo/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-echo/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_b2v-com-echo/management-zone/management-zone.yaml new file mode 100644 index 00000000..62500ebd --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-echo/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDb2v-com-echo: default.json + +CDb2v-com-echo: +- name: CD_b2v-com-echo +- tag: b2v-com-echo diff --git a/BMW-Dynatrace-config/CD_b2v-com-echo/notification/README.md b/BMW-Dynatrace-config/CD_b2v-com-echo/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-echo/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-echo/notification/email.json b/BMW-Dynatrace-config/CD_b2v-com-echo/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-echo/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-echo/notification/msTeams.json b/BMW-Dynatrace-config/CD_b2v-com-echo/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-echo/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-echo/notification/notification.yaml b/BMW-Dynatrace-config/CD_b2v-com-echo/notification/notification.yaml new file mode 100644 index 00000000..5465602a --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-echo/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDb2v-com-echo-PROD: msTeams.json +- CDb2v-com-echo-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDb2v-com-echo-PROD: +- name: CD_b2v-com-echo PROD +- alertingProfile: CD_b2v-com-echo/alerting-profile/CDb2v-com-echo-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDb2v-com-echo-PROD.EMEA-Prod: +- name: CD_b2v-com-echo PROD +- alertingProfile: CD_b2v-com-echo/alerting-profile/CDb2v-com-echo-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDb2v-com-echo-PROD.NA-Prod: +- name: CD_b2v-com-echo PROD +- alertingProfile: CD_b2v-com-echo/alerting-profile/CDb2v-com-echo-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDb2v-com-echo-PROD.CN-Prod: +- name: CD_b2v-com-echo PROD +- alertingProfile: CD_b2v-com-echo/alerting-profile/CDb2v-com-echo-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDb2v-com-echo-INT: +- name: CD_b2v-com-echo INT +- alertingProfile: CD_b2v-com-echo/alerting-profile/CDb2v-com-echo-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDb2v-com-echo-INT.EMEA-PreProd: +- name: CD_b2v-com-echo INT +- alertingProfile: CD_b2v-com-echo/alerting-profile/CDb2v-com-echo-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDb2v-com-echo-INT.NA-PreProd: +- name: CD_b2v-com-echo INT +- alertingProfile: CD_b2v-com-echo/alerting-profile/CDb2v-com-echo-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDb2v-com-echo-INT.CN-PreProd: +- name: CD_b2v-com-echo INT +- alertingProfile: CD_b2v-com-echo/alerting-profile/CDb2v-com-echo-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-echo/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_b2v-com-echo/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-echo/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-echo/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_b2v-com-echo/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-echo/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-echo/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_b2v-com-echo/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..5efe9a85 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-echo/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- b2v-com-echo: default.json + +b2v-com-echo: +- name: CD_b2v-com-echo - +- mzName: CD_b2v-com-echo/management-zone/CDb2v-com-echo.name +- mzId: CD_b2v-com-echo/management-zone/CDb2v-com-echo.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-fe/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_b2v-com-fe/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..d100ae55 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-fe/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDb2v-com-fe-PROD: default.json +- CDb2v-com-fe-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDb2v-com-fe-PROD: +- name: CD_b2v-com-fe PROD +- tag: b2v-com-fe +- mzId: CD_b2v-com-fe/management-zone/CDb2v-com-fe.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDb2v-com-fe-PROD.EMEA-Prod: +- name: CD_b2v-com-fe PROD +- tag: b2v-com-fe +- mzId: CD_b2v-com-fe/management-zone/CDb2v-com-fe.id +- env: PROD +- skipDeployment: "false" +CDb2v-com-fe-PROD.NA-Prod: +- name: CD_b2v-com-fe PROD +- tag: b2v-com-fe +- mzId: CD_b2v-com-fe/management-zone/CDb2v-com-fe.id +- env: PROD +- skipDeployment: "false" +CDb2v-com-fe-PROD.CN-Prod: +- name: CD_b2v-com-fe PROD +- tag: b2v-com-fe +- mzId: CD_b2v-com-fe/management-zone/CDb2v-com-fe.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDb2v-com-fe-INT: +- name: CD_b2v-com-fe INT +- tag: b2v-com-fe +- mzId: CD_b2v-com-fe/management-zone/CDb2v-com-fe.id +- env: INT +- skipDeployment: "true" +#Configuration +CDb2v-com-fe-INT.EMEA-PreProd: +- name: CD_b2v-com-fe INT +- tag: b2v-com-fe +- mzId: CD_b2v-com-fe/management-zone/CDb2v-com-fe.id +- env: INT +- skipDeployment: "false" +CDb2v-com-fe-INT.NA-PreProd: +- name: CD_b2v-com-fe INT +- tag: b2v-com-fe +- mzId: CD_b2v-com-fe/management-zone/CDb2v-com-fe.id +- env: INT +- skipDeployment: "false" +CDb2v-com-fe-INT.CN-PreProd: +- name: CD_b2v-com-fe INT +- tag: b2v-com-fe +- mzId: CD_b2v-com-fe/management-zone/CDb2v-com-fe.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-fe/alerting-profile/default.json b/BMW-Dynatrace-config/CD_b2v-com-fe/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-fe/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-fe/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_b2v-com-fe/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-fe/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-fe/custom-service-java/README.md b/BMW-Dynatrace-config/CD_b2v-com-fe/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-fe/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-fe/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_b2v-com-fe/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-fe/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-fe/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_b2v-com-fe/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-fe/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-fe/dashboard/README.md b/BMW-Dynatrace-config/CD_b2v-com-fe/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-fe/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-fe/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_b2v-com-fe/dashboard/dashboard.yaml new file mode 100644 index 00000000..104ec302 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-fe/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDb2v-com-fe-PROD-E2E: defaultPRODE2E.json +- CDb2v-com-fe-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDb2v-com-fe-PROD-E2E: +- name: CD_b2v-com-fe PROD-E2E +- mzName: CD_b2v-com-fe/management-zone/CDb2v-com-fe.name +- mzId: CD_b2v-com-fe/management-zone/CDb2v-com-fe.id +- skipDeployment: "true" +#Configuration +CDb2v-com-fe-PROD-E2E.EMEA-Prod: +- name: CD_b2v-com-fe PROD-E2E +- mzName: CD_b2v-com-fe/management-zone/CDb2v-com-fe.name +- mzId: CD_b2v-com-fe/management-zone/CDb2v-com-fe.id +- tag: b2v-com-fe +- skipDeployment: "false" +CDb2v-com-fe-PROD-E2E.NA-Prod: +- name: CD_b2v-com-fe PROD-E2E +- mzName: CD_b2v-com-fe/management-zone/CDb2v-com-fe.name +- mzId: CD_b2v-com-fe/management-zone/CDb2v-com-fe.id +- tag: b2v-com-fe +- skipDeployment: "false" +CDb2v-com-fe-PROD-E2E.CN-Prod: +- name: CD_b2v-com-fe PROD-E2E +- mzName: CD_b2v-com-fe/management-zone/CDb2v-com-fe.name +- mzId: CD_b2v-com-fe/management-zone/CDb2v-com-fe.id +- tag: b2v-com-fe +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDb2v-com-fe-INT-TEST: +- name: CD_b2v-com-fe INT-TEST +- mzName: CD_b2v-com-fe/management-zone/CDb2v-com-fe.name +- mzId: CD_b2v-com-fe/management-zone/CDb2v-com-fe.id +- tag: b2v-com-fe +- skipDeployment: "true" +#Configuration +CDb2v-com-fe-INT-TEST.EMEA-PreProd: +- name: CD_b2v-com-fe INT-TEST +- mzName: CD_b2v-com-fe/management-zone/CDb2v-com-fe.name +- mzId: CD_b2v-com-fe/management-zone/CDb2v-com-fe.id +- tag: b2v-com-fe +- skipDeployment: "false" +CDb2v-com-fe-INT-TEST.NA-PreProd: +- name: CD_b2v-com-fe INT-TEST +- mzName: CD_b2v-com-fe/management-zone/CDb2v-com-fe.name +- mzId: CD_b2v-com-fe/management-zone/CDb2v-com-fe.id +- env: INT +- skipDeployment: "false" +CDb2v-com-fe-INT-TEST.CN-PreProd: +- name: CD_b2v-com-fe INT-TEST +- mzName: CD_b2v-com-fe/management-zone/CDb2v-com-fe.name +- mzId: CD_b2v-com-fe/management-zone/CDb2v-com-fe.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-fe/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_b2v-com-fe/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-fe/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-fe/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_b2v-com-fe/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-fe/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-fe/management-zone/README.md b/BMW-Dynatrace-config/CD_b2v-com-fe/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-fe/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_b2v-com-fe/management-zone/default.json b/BMW-Dynatrace-config/CD_b2v-com-fe/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-fe/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-fe/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_b2v-com-fe/management-zone/management-zone.yaml new file mode 100644 index 00000000..2c6154d8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-fe/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDb2v-com-fe: default.json + +CDb2v-com-fe: +- name: CD_b2v-com-fe +- tag: b2v-com-fe diff --git a/BMW-Dynatrace-config/CD_b2v-com-fe/notification/README.md b/BMW-Dynatrace-config/CD_b2v-com-fe/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-fe/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-fe/notification/email.json b/BMW-Dynatrace-config/CD_b2v-com-fe/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-fe/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-fe/notification/msTeams.json b/BMW-Dynatrace-config/CD_b2v-com-fe/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-fe/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-fe/notification/notification.yaml b/BMW-Dynatrace-config/CD_b2v-com-fe/notification/notification.yaml new file mode 100644 index 00000000..e5026f4d --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-fe/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDb2v-com-fe-PROD: msTeams.json +- CDb2v-com-fe-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDb2v-com-fe-PROD: +- name: CD_b2v-com-fe PROD +- alertingProfile: CD_b2v-com-fe/alerting-profile/CDb2v-com-fe-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDb2v-com-fe-PROD.EMEA-Prod: +- name: CD_b2v-com-fe PROD +- alertingProfile: CD_b2v-com-fe/alerting-profile/CDb2v-com-fe-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDb2v-com-fe-PROD.NA-Prod: +- name: CD_b2v-com-fe PROD +- alertingProfile: CD_b2v-com-fe/alerting-profile/CDb2v-com-fe-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDb2v-com-fe-PROD.CN-Prod: +- name: CD_b2v-com-fe PROD +- alertingProfile: CD_b2v-com-fe/alerting-profile/CDb2v-com-fe-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDb2v-com-fe-INT: +- name: CD_b2v-com-fe INT +- alertingProfile: CD_b2v-com-fe/alerting-profile/CDb2v-com-fe-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDb2v-com-fe-INT.EMEA-PreProd: +- name: CD_b2v-com-fe INT +- alertingProfile: CD_b2v-com-fe/alerting-profile/CDb2v-com-fe-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDb2v-com-fe-INT.NA-PreProd: +- name: CD_b2v-com-fe INT +- alertingProfile: CD_b2v-com-fe/alerting-profile/CDb2v-com-fe-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDb2v-com-fe-INT.CN-PreProd: +- name: CD_b2v-com-fe INT +- alertingProfile: CD_b2v-com-fe/alerting-profile/CDb2v-com-fe-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-fe/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_b2v-com-fe/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-fe/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-fe/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_b2v-com-fe/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-fe/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-fe/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_b2v-com-fe/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..3f94dd56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-fe/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- b2v-com-fe: default.json + +b2v-com-fe: +- name: CD_b2v-com-fe - +- mzName: CD_b2v-com-fe/management-zone/CDb2v-com-fe.name +- mzId: CD_b2v-com-fe/management-zone/CDb2v-com-fe.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..8a49e493 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDb2v-com-gcdm-client-PROD: default.json +- CDb2v-com-gcdm-client-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDb2v-com-gcdm-client-PROD: +- name: CD_b2v-com-gcdm-client PROD +- tag: b2v-com-gcdm-client +- mzId: CD_b2v-com-gcdm-client/management-zone/CDb2v-com-gcdm-client.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDb2v-com-gcdm-client-PROD.EMEA-Prod: +- name: CD_b2v-com-gcdm-client PROD +- tag: b2v-com-gcdm-client +- mzId: CD_b2v-com-gcdm-client/management-zone/CDb2v-com-gcdm-client.id +- env: PROD +- skipDeployment: "false" +CDb2v-com-gcdm-client-PROD.NA-Prod: +- name: CD_b2v-com-gcdm-client PROD +- tag: b2v-com-gcdm-client +- mzId: CD_b2v-com-gcdm-client/management-zone/CDb2v-com-gcdm-client.id +- env: PROD +- skipDeployment: "false" +CDb2v-com-gcdm-client-PROD.CN-Prod: +- name: CD_b2v-com-gcdm-client PROD +- tag: b2v-com-gcdm-client +- mzId: CD_b2v-com-gcdm-client/management-zone/CDb2v-com-gcdm-client.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDb2v-com-gcdm-client-INT: +- name: CD_b2v-com-gcdm-client INT +- tag: b2v-com-gcdm-client +- mzId: CD_b2v-com-gcdm-client/management-zone/CDb2v-com-gcdm-client.id +- env: INT +- skipDeployment: "true" +#Configuration +CDb2v-com-gcdm-client-INT.EMEA-PreProd: +- name: CD_b2v-com-gcdm-client INT +- tag: b2v-com-gcdm-client +- mzId: CD_b2v-com-gcdm-client/management-zone/CDb2v-com-gcdm-client.id +- env: INT +- skipDeployment: "false" +CDb2v-com-gcdm-client-INT.NA-PreProd: +- name: CD_b2v-com-gcdm-client INT +- tag: b2v-com-gcdm-client +- mzId: CD_b2v-com-gcdm-client/management-zone/CDb2v-com-gcdm-client.id +- env: INT +- skipDeployment: "false" +CDb2v-com-gcdm-client-INT.CN-PreProd: +- name: CD_b2v-com-gcdm-client INT +- tag: b2v-com-gcdm-client +- mzId: CD_b2v-com-gcdm-client/management-zone/CDb2v-com-gcdm-client.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/alerting-profile/default.json b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/custom-service-java/README.md b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/dashboard/README.md b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/dashboard/dashboard.yaml new file mode 100644 index 00000000..db75d0bc --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDb2v-com-gcdm-client-PROD-E2E: defaultPRODE2E.json +- CDb2v-com-gcdm-client-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDb2v-com-gcdm-client-PROD-E2E: +- name: CD_b2v-com-gcdm-client PROD-E2E +- mzName: CD_b2v-com-gcdm-client/management-zone/CDb2v-com-gcdm-client.name +- mzId: CD_b2v-com-gcdm-client/management-zone/CDb2v-com-gcdm-client.id +- skipDeployment: "true" +#Configuration +CDb2v-com-gcdm-client-PROD-E2E.EMEA-Prod: +- name: CD_b2v-com-gcdm-client PROD-E2E +- mzName: CD_b2v-com-gcdm-client/management-zone/CDb2v-com-gcdm-client.name +- mzId: CD_b2v-com-gcdm-client/management-zone/CDb2v-com-gcdm-client.id +- tag: b2v-com-gcdm-client +- skipDeployment: "false" +CDb2v-com-gcdm-client-PROD-E2E.NA-Prod: +- name: CD_b2v-com-gcdm-client PROD-E2E +- mzName: CD_b2v-com-gcdm-client/management-zone/CDb2v-com-gcdm-client.name +- mzId: CD_b2v-com-gcdm-client/management-zone/CDb2v-com-gcdm-client.id +- tag: b2v-com-gcdm-client +- skipDeployment: "false" +CDb2v-com-gcdm-client-PROD-E2E.CN-Prod: +- name: CD_b2v-com-gcdm-client PROD-E2E +- mzName: CD_b2v-com-gcdm-client/management-zone/CDb2v-com-gcdm-client.name +- mzId: CD_b2v-com-gcdm-client/management-zone/CDb2v-com-gcdm-client.id +- tag: b2v-com-gcdm-client +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDb2v-com-gcdm-client-INT-TEST: +- name: CD_b2v-com-gcdm-client INT-TEST +- mzName: CD_b2v-com-gcdm-client/management-zone/CDb2v-com-gcdm-client.name +- mzId: CD_b2v-com-gcdm-client/management-zone/CDb2v-com-gcdm-client.id +- tag: b2v-com-gcdm-client +- skipDeployment: "true" +#Configuration +CDb2v-com-gcdm-client-INT-TEST.EMEA-PreProd: +- name: CD_b2v-com-gcdm-client INT-TEST +- mzName: CD_b2v-com-gcdm-client/management-zone/CDb2v-com-gcdm-client.name +- mzId: CD_b2v-com-gcdm-client/management-zone/CDb2v-com-gcdm-client.id +- tag: b2v-com-gcdm-client +- skipDeployment: "false" +CDb2v-com-gcdm-client-INT-TEST.NA-PreProd: +- name: CD_b2v-com-gcdm-client INT-TEST +- mzName: CD_b2v-com-gcdm-client/management-zone/CDb2v-com-gcdm-client.name +- mzId: CD_b2v-com-gcdm-client/management-zone/CDb2v-com-gcdm-client.id +- env: INT +- skipDeployment: "false" +CDb2v-com-gcdm-client-INT-TEST.CN-PreProd: +- name: CD_b2v-com-gcdm-client INT-TEST +- mzName: CD_b2v-com-gcdm-client/management-zone/CDb2v-com-gcdm-client.name +- mzId: CD_b2v-com-gcdm-client/management-zone/CDb2v-com-gcdm-client.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/management-zone/README.md b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/management-zone/default.json b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/management-zone/management-zone.yaml new file mode 100644 index 00000000..bcd78d62 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDb2v-com-gcdm-client: default.json + +CDb2v-com-gcdm-client: +- name: CD_b2v-com-gcdm-client +- tag: b2v-com-gcdm-client diff --git a/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/notification/README.md b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/notification/email.json b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/notification/msTeams.json b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/notification/notification.yaml b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/notification/notification.yaml new file mode 100644 index 00000000..9a61c625 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDb2v-com-gcdm-client-PROD: msTeams.json +- CDb2v-com-gcdm-client-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDb2v-com-gcdm-client-PROD: +- name: CD_b2v-com-gcdm-client PROD +- alertingProfile: CD_b2v-com-gcdm-client/alerting-profile/CDb2v-com-gcdm-client-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDb2v-com-gcdm-client-PROD.EMEA-Prod: +- name: CD_b2v-com-gcdm-client PROD +- alertingProfile: CD_b2v-com-gcdm-client/alerting-profile/CDb2v-com-gcdm-client-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDb2v-com-gcdm-client-PROD.NA-Prod: +- name: CD_b2v-com-gcdm-client PROD +- alertingProfile: CD_b2v-com-gcdm-client/alerting-profile/CDb2v-com-gcdm-client-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDb2v-com-gcdm-client-PROD.CN-Prod: +- name: CD_b2v-com-gcdm-client PROD +- alertingProfile: CD_b2v-com-gcdm-client/alerting-profile/CDb2v-com-gcdm-client-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDb2v-com-gcdm-client-INT: +- name: CD_b2v-com-gcdm-client INT +- alertingProfile: CD_b2v-com-gcdm-client/alerting-profile/CDb2v-com-gcdm-client-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDb2v-com-gcdm-client-INT.EMEA-PreProd: +- name: CD_b2v-com-gcdm-client INT +- alertingProfile: CD_b2v-com-gcdm-client/alerting-profile/CDb2v-com-gcdm-client-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDb2v-com-gcdm-client-INT.NA-PreProd: +- name: CD_b2v-com-gcdm-client INT +- alertingProfile: CD_b2v-com-gcdm-client/alerting-profile/CDb2v-com-gcdm-client-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDb2v-com-gcdm-client-INT.CN-PreProd: +- name: CD_b2v-com-gcdm-client INT +- alertingProfile: CD_b2v-com-gcdm-client/alerting-profile/CDb2v-com-gcdm-client-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..765abbae --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- b2v-com-gcdm-client: default.json + +b2v-com-gcdm-client: +- name: CD_b2v-com-gcdm-client - +- mzName: CD_b2v-com-gcdm-client/management-zone/CDb2v-com-gcdm-client.name +- mzId: CD_b2v-com-gcdm-client/management-zone/CDb2v-com-gcdm-client.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-hello/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_b2v-com-hello/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..8e26b794 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-hello/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDb2v-com-hello-PROD: default.json +- CDb2v-com-hello-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDb2v-com-hello-PROD: +- name: CD_b2v-com-hello PROD +- tag: b2v-com-hello +- mzId: CD_b2v-com-hello/management-zone/CDb2v-com-hello.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDb2v-com-hello-PROD.EMEA-Prod: +- name: CD_b2v-com-hello PROD +- tag: b2v-com-hello +- mzId: CD_b2v-com-hello/management-zone/CDb2v-com-hello.id +- env: PROD +- skipDeployment: "false" +CDb2v-com-hello-PROD.NA-Prod: +- name: CD_b2v-com-hello PROD +- tag: b2v-com-hello +- mzId: CD_b2v-com-hello/management-zone/CDb2v-com-hello.id +- env: PROD +- skipDeployment: "false" +CDb2v-com-hello-PROD.CN-Prod: +- name: CD_b2v-com-hello PROD +- tag: b2v-com-hello +- mzId: CD_b2v-com-hello/management-zone/CDb2v-com-hello.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDb2v-com-hello-INT: +- name: CD_b2v-com-hello INT +- tag: b2v-com-hello +- mzId: CD_b2v-com-hello/management-zone/CDb2v-com-hello.id +- env: INT +- skipDeployment: "true" +#Configuration +CDb2v-com-hello-INT.EMEA-PreProd: +- name: CD_b2v-com-hello INT +- tag: b2v-com-hello +- mzId: CD_b2v-com-hello/management-zone/CDb2v-com-hello.id +- env: INT +- skipDeployment: "false" +CDb2v-com-hello-INT.NA-PreProd: +- name: CD_b2v-com-hello INT +- tag: b2v-com-hello +- mzId: CD_b2v-com-hello/management-zone/CDb2v-com-hello.id +- env: INT +- skipDeployment: "false" +CDb2v-com-hello-INT.CN-PreProd: +- name: CD_b2v-com-hello INT +- tag: b2v-com-hello +- mzId: CD_b2v-com-hello/management-zone/CDb2v-com-hello.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-hello/alerting-profile/default.json b/BMW-Dynatrace-config/CD_b2v-com-hello/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-hello/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-hello/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_b2v-com-hello/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-hello/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-hello/custom-service-java/README.md b/BMW-Dynatrace-config/CD_b2v-com-hello/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-hello/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-hello/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_b2v-com-hello/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-hello/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-hello/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_b2v-com-hello/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-hello/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-hello/dashboard/README.md b/BMW-Dynatrace-config/CD_b2v-com-hello/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-hello/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-hello/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_b2v-com-hello/dashboard/dashboard.yaml new file mode 100644 index 00000000..f6e69726 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-hello/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDb2v-com-hello-PROD-E2E: defaultPRODE2E.json +- CDb2v-com-hello-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDb2v-com-hello-PROD-E2E: +- name: CD_b2v-com-hello PROD-E2E +- mzName: CD_b2v-com-hello/management-zone/CDb2v-com-hello.name +- mzId: CD_b2v-com-hello/management-zone/CDb2v-com-hello.id +- skipDeployment: "true" +#Configuration +CDb2v-com-hello-PROD-E2E.EMEA-Prod: +- name: CD_b2v-com-hello PROD-E2E +- mzName: CD_b2v-com-hello/management-zone/CDb2v-com-hello.name +- mzId: CD_b2v-com-hello/management-zone/CDb2v-com-hello.id +- tag: b2v-com-hello +- skipDeployment: "false" +CDb2v-com-hello-PROD-E2E.NA-Prod: +- name: CD_b2v-com-hello PROD-E2E +- mzName: CD_b2v-com-hello/management-zone/CDb2v-com-hello.name +- mzId: CD_b2v-com-hello/management-zone/CDb2v-com-hello.id +- tag: b2v-com-hello +- skipDeployment: "false" +CDb2v-com-hello-PROD-E2E.CN-Prod: +- name: CD_b2v-com-hello PROD-E2E +- mzName: CD_b2v-com-hello/management-zone/CDb2v-com-hello.name +- mzId: CD_b2v-com-hello/management-zone/CDb2v-com-hello.id +- tag: b2v-com-hello +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDb2v-com-hello-INT-TEST: +- name: CD_b2v-com-hello INT-TEST +- mzName: CD_b2v-com-hello/management-zone/CDb2v-com-hello.name +- mzId: CD_b2v-com-hello/management-zone/CDb2v-com-hello.id +- tag: b2v-com-hello +- skipDeployment: "true" +#Configuration +CDb2v-com-hello-INT-TEST.EMEA-PreProd: +- name: CD_b2v-com-hello INT-TEST +- mzName: CD_b2v-com-hello/management-zone/CDb2v-com-hello.name +- mzId: CD_b2v-com-hello/management-zone/CDb2v-com-hello.id +- tag: b2v-com-hello +- skipDeployment: "false" +CDb2v-com-hello-INT-TEST.NA-PreProd: +- name: CD_b2v-com-hello INT-TEST +- mzName: CD_b2v-com-hello/management-zone/CDb2v-com-hello.name +- mzId: CD_b2v-com-hello/management-zone/CDb2v-com-hello.id +- env: INT +- skipDeployment: "false" +CDb2v-com-hello-INT-TEST.CN-PreProd: +- name: CD_b2v-com-hello INT-TEST +- mzName: CD_b2v-com-hello/management-zone/CDb2v-com-hello.name +- mzId: CD_b2v-com-hello/management-zone/CDb2v-com-hello.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-hello/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_b2v-com-hello/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-hello/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-hello/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_b2v-com-hello/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-hello/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-hello/management-zone/README.md b/BMW-Dynatrace-config/CD_b2v-com-hello/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-hello/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_b2v-com-hello/management-zone/default.json b/BMW-Dynatrace-config/CD_b2v-com-hello/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-hello/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-hello/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_b2v-com-hello/management-zone/management-zone.yaml new file mode 100644 index 00000000..309c4869 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-hello/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDb2v-com-hello: default.json + +CDb2v-com-hello: +- name: CD_b2v-com-hello +- tag: b2v-com-hello diff --git a/BMW-Dynatrace-config/CD_b2v-com-hello/notification/README.md b/BMW-Dynatrace-config/CD_b2v-com-hello/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-hello/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-hello/notification/email.json b/BMW-Dynatrace-config/CD_b2v-com-hello/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-hello/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-hello/notification/msTeams.json b/BMW-Dynatrace-config/CD_b2v-com-hello/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-hello/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-hello/notification/notification.yaml b/BMW-Dynatrace-config/CD_b2v-com-hello/notification/notification.yaml new file mode 100644 index 00000000..0e074532 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-hello/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDb2v-com-hello-PROD: msTeams.json +- CDb2v-com-hello-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDb2v-com-hello-PROD: +- name: CD_b2v-com-hello PROD +- alertingProfile: CD_b2v-com-hello/alerting-profile/CDb2v-com-hello-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDb2v-com-hello-PROD.EMEA-Prod: +- name: CD_b2v-com-hello PROD +- alertingProfile: CD_b2v-com-hello/alerting-profile/CDb2v-com-hello-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDb2v-com-hello-PROD.NA-Prod: +- name: CD_b2v-com-hello PROD +- alertingProfile: CD_b2v-com-hello/alerting-profile/CDb2v-com-hello-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDb2v-com-hello-PROD.CN-Prod: +- name: CD_b2v-com-hello PROD +- alertingProfile: CD_b2v-com-hello/alerting-profile/CDb2v-com-hello-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDb2v-com-hello-INT: +- name: CD_b2v-com-hello INT +- alertingProfile: CD_b2v-com-hello/alerting-profile/CDb2v-com-hello-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDb2v-com-hello-INT.EMEA-PreProd: +- name: CD_b2v-com-hello INT +- alertingProfile: CD_b2v-com-hello/alerting-profile/CDb2v-com-hello-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDb2v-com-hello-INT.NA-PreProd: +- name: CD_b2v-com-hello INT +- alertingProfile: CD_b2v-com-hello/alerting-profile/CDb2v-com-hello-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDb2v-com-hello-INT.CN-PreProd: +- name: CD_b2v-com-hello INT +- alertingProfile: CD_b2v-com-hello/alerting-profile/CDb2v-com-hello-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-hello/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_b2v-com-hello/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-hello/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-hello/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_b2v-com-hello/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-hello/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-hello/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_b2v-com-hello/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..fa45bab7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-hello/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- b2v-com-hello: default.json + +b2v-com-hello: +- name: CD_b2v-com-hello - +- mzName: CD_b2v-com-hello/management-zone/CDb2v-com-hello.name +- mzId: CD_b2v-com-hello/management-zone/CDb2v-com-hello.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-nots/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_b2v-nots/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..baa5ee98 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-nots/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDb2v-nots-PROD: default.json +- CDb2v-nots-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDb2v-nots-PROD: +- name: CD_b2v-nots PROD +- tag: b2v-nots +- mzId: CD_b2v-nots/management-zone/CDb2v-nots.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDb2v-nots-PROD.EMEA-Prod: +- name: CD_b2v-nots PROD +- tag: b2v-nots +- mzId: CD_b2v-nots/management-zone/CDb2v-nots.id +- env: PROD +- skipDeployment: "false" +CDb2v-nots-PROD.NA-Prod: +- name: CD_b2v-nots PROD +- tag: b2v-nots +- mzId: CD_b2v-nots/management-zone/CDb2v-nots.id +- env: PROD +- skipDeployment: "false" +CDb2v-nots-PROD.CN-Prod: +- name: CD_b2v-nots PROD +- tag: b2v-nots +- mzId: CD_b2v-nots/management-zone/CDb2v-nots.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDb2v-nots-INT: +- name: CD_b2v-nots INT +- tag: b2v-nots +- mzId: CD_b2v-nots/management-zone/CDb2v-nots.id +- env: INT +- skipDeployment: "true" +#Configuration +CDb2v-nots-INT.EMEA-PreProd: +- name: CD_b2v-nots INT +- tag: b2v-nots +- mzId: CD_b2v-nots/management-zone/CDb2v-nots.id +- env: INT +- skipDeployment: "false" +CDb2v-nots-INT.NA-PreProd: +- name: CD_b2v-nots INT +- tag: b2v-nots +- mzId: CD_b2v-nots/management-zone/CDb2v-nots.id +- env: INT +- skipDeployment: "false" +CDb2v-nots-INT.CN-PreProd: +- name: CD_b2v-nots INT +- tag: b2v-nots +- mzId: CD_b2v-nots/management-zone/CDb2v-nots.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-nots/alerting-profile/default.json b/BMW-Dynatrace-config/CD_b2v-nots/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-nots/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-nots/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_b2v-nots/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-nots/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-nots/custom-service-java/README.md b/BMW-Dynatrace-config/CD_b2v-nots/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-nots/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-nots/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_b2v-nots/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-nots/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-nots/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_b2v-nots/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-nots/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-nots/dashboard/README.md b/BMW-Dynatrace-config/CD_b2v-nots/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-nots/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-nots/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_b2v-nots/dashboard/dashboard.yaml new file mode 100644 index 00000000..037bc145 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-nots/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDb2v-nots-PROD-E2E: defaultPRODE2E.json +- CDb2v-nots-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDb2v-nots-PROD-E2E: +- name: CD_b2v-nots PROD-E2E +- mzName: CD_b2v-nots/management-zone/CDb2v-nots.name +- mzId: CD_b2v-nots/management-zone/CDb2v-nots.id +- skipDeployment: "true" +#Configuration +CDb2v-nots-PROD-E2E.EMEA-Prod: +- name: CD_b2v-nots PROD-E2E +- mzName: CD_b2v-nots/management-zone/CDb2v-nots.name +- mzId: CD_b2v-nots/management-zone/CDb2v-nots.id +- tag: b2v-nots +- skipDeployment: "false" +CDb2v-nots-PROD-E2E.NA-Prod: +- name: CD_b2v-nots PROD-E2E +- mzName: CD_b2v-nots/management-zone/CDb2v-nots.name +- mzId: CD_b2v-nots/management-zone/CDb2v-nots.id +- tag: b2v-nots +- skipDeployment: "false" +CDb2v-nots-PROD-E2E.CN-Prod: +- name: CD_b2v-nots PROD-E2E +- mzName: CD_b2v-nots/management-zone/CDb2v-nots.name +- mzId: CD_b2v-nots/management-zone/CDb2v-nots.id +- tag: b2v-nots +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDb2v-nots-INT-TEST: +- name: CD_b2v-nots INT-TEST +- mzName: CD_b2v-nots/management-zone/CDb2v-nots.name +- mzId: CD_b2v-nots/management-zone/CDb2v-nots.id +- tag: b2v-nots +- skipDeployment: "true" +#Configuration +CDb2v-nots-INT-TEST.EMEA-PreProd: +- name: CD_b2v-nots INT-TEST +- mzName: CD_b2v-nots/management-zone/CDb2v-nots.name +- mzId: CD_b2v-nots/management-zone/CDb2v-nots.id +- tag: b2v-nots +- skipDeployment: "false" +CDb2v-nots-INT-TEST.NA-PreProd: +- name: CD_b2v-nots INT-TEST +- mzName: CD_b2v-nots/management-zone/CDb2v-nots.name +- mzId: CD_b2v-nots/management-zone/CDb2v-nots.id +- env: INT +- skipDeployment: "false" +CDb2v-nots-INT-TEST.CN-PreProd: +- name: CD_b2v-nots INT-TEST +- mzName: CD_b2v-nots/management-zone/CDb2v-nots.name +- mzId: CD_b2v-nots/management-zone/CDb2v-nots.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-nots/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_b2v-nots/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-nots/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-nots/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_b2v-nots/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-nots/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-nots/management-zone/README.md b/BMW-Dynatrace-config/CD_b2v-nots/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-nots/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_b2v-nots/management-zone/default.json b/BMW-Dynatrace-config/CD_b2v-nots/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-nots/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-nots/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_b2v-nots/management-zone/management-zone.yaml new file mode 100644 index 00000000..1e0ed74e --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-nots/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDb2v-nots: default.json + +CDb2v-nots: +- name: CD_b2v-nots +- tag: b2v-nots diff --git a/BMW-Dynatrace-config/CD_b2v-nots/notification/README.md b/BMW-Dynatrace-config/CD_b2v-nots/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-nots/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-nots/notification/email.json b/BMW-Dynatrace-config/CD_b2v-nots/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-nots/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-nots/notification/msTeams.json b/BMW-Dynatrace-config/CD_b2v-nots/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-nots/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-nots/notification/notification.yaml b/BMW-Dynatrace-config/CD_b2v-nots/notification/notification.yaml new file mode 100644 index 00000000..6702a057 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-nots/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDb2v-nots-PROD: msTeams.json +- CDb2v-nots-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDb2v-nots-PROD: +- name: CD_b2v-nots PROD +- alertingProfile: CD_b2v-nots/alerting-profile/CDb2v-nots-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDb2v-nots-PROD.EMEA-Prod: +- name: CD_b2v-nots PROD +- alertingProfile: CD_b2v-nots/alerting-profile/CDb2v-nots-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDb2v-nots-PROD.NA-Prod: +- name: CD_b2v-nots PROD +- alertingProfile: CD_b2v-nots/alerting-profile/CDb2v-nots-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDb2v-nots-PROD.CN-Prod: +- name: CD_b2v-nots PROD +- alertingProfile: CD_b2v-nots/alerting-profile/CDb2v-nots-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDb2v-nots-INT: +- name: CD_b2v-nots INT +- alertingProfile: CD_b2v-nots/alerting-profile/CDb2v-nots-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDb2v-nots-INT.EMEA-PreProd: +- name: CD_b2v-nots INT +- alertingProfile: CD_b2v-nots/alerting-profile/CDb2v-nots-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDb2v-nots-INT.NA-PreProd: +- name: CD_b2v-nots INT +- alertingProfile: CD_b2v-nots/alerting-profile/CDb2v-nots-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDb2v-nots-INT.CN-PreProd: +- name: CD_b2v-nots INT +- alertingProfile: CD_b2v-nots/alerting-profile/CDb2v-nots-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-nots/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_b2v-nots/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-nots/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-nots/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_b2v-nots/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-nots/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-nots/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_b2v-nots/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..8e972c6c --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-nots/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- b2v-nots: default.json + +b2v-nots: +- name: CD_b2v-nots - +- mzName: CD_b2v-nots/management-zone/CDb2v-nots.name +- mzId: CD_b2v-nots/management-zone/CDb2v-nots.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-sms-statistics/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_b2v-sms-statistics/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..a231a173 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-sms-statistics/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDb2v-sms-statistics-PROD: default.json +- CDb2v-sms-statistics-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDb2v-sms-statistics-PROD: +- name: CD_b2v-sms-statistics PROD +- tag: b2v-sms-statistics +- mzId: CD_b2v-sms-statistics/management-zone/CDb2v-sms-statistics.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDb2v-sms-statistics-PROD.EMEA-Prod: +- name: CD_b2v-sms-statistics PROD +- tag: b2v-sms-statistics +- mzId: CD_b2v-sms-statistics/management-zone/CDb2v-sms-statistics.id +- env: PROD +- skipDeployment: "false" +CDb2v-sms-statistics-PROD.NA-Prod: +- name: CD_b2v-sms-statistics PROD +- tag: b2v-sms-statistics +- mzId: CD_b2v-sms-statistics/management-zone/CDb2v-sms-statistics.id +- env: PROD +- skipDeployment: "false" +CDb2v-sms-statistics-PROD.CN-Prod: +- name: CD_b2v-sms-statistics PROD +- tag: b2v-sms-statistics +- mzId: CD_b2v-sms-statistics/management-zone/CDb2v-sms-statistics.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDb2v-sms-statistics-INT: +- name: CD_b2v-sms-statistics INT +- tag: b2v-sms-statistics +- mzId: CD_b2v-sms-statistics/management-zone/CDb2v-sms-statistics.id +- env: INT +- skipDeployment: "true" +#Configuration +CDb2v-sms-statistics-INT.EMEA-PreProd: +- name: CD_b2v-sms-statistics INT +- tag: b2v-sms-statistics +- mzId: CD_b2v-sms-statistics/management-zone/CDb2v-sms-statistics.id +- env: INT +- skipDeployment: "false" +CDb2v-sms-statistics-INT.NA-PreProd: +- name: CD_b2v-sms-statistics INT +- tag: b2v-sms-statistics +- mzId: CD_b2v-sms-statistics/management-zone/CDb2v-sms-statistics.id +- env: INT +- skipDeployment: "false" +CDb2v-sms-statistics-INT.CN-PreProd: +- name: CD_b2v-sms-statistics INT +- tag: b2v-sms-statistics +- mzId: CD_b2v-sms-statistics/management-zone/CDb2v-sms-statistics.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-sms-statistics/alerting-profile/default.json b/BMW-Dynatrace-config/CD_b2v-sms-statistics/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-sms-statistics/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-sms-statistics/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_b2v-sms-statistics/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-sms-statistics/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-sms-statistics/custom-service-java/README.md b/BMW-Dynatrace-config/CD_b2v-sms-statistics/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-sms-statistics/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-sms-statistics/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_b2v-sms-statistics/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-sms-statistics/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-sms-statistics/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_b2v-sms-statistics/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-sms-statistics/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-sms-statistics/dashboard/README.md b/BMW-Dynatrace-config/CD_b2v-sms-statistics/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-sms-statistics/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-sms-statistics/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_b2v-sms-statistics/dashboard/dashboard.yaml new file mode 100644 index 00000000..806de38a --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-sms-statistics/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDb2v-sms-statistics-PROD-E2E: defaultPRODE2E.json +- CDb2v-sms-statistics-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDb2v-sms-statistics-PROD-E2E: +- name: CD_b2v-sms-statistics PROD-E2E +- mzName: CD_b2v-sms-statistics/management-zone/CDb2v-sms-statistics.name +- mzId: CD_b2v-sms-statistics/management-zone/CDb2v-sms-statistics.id +- skipDeployment: "true" +#Configuration +CDb2v-sms-statistics-PROD-E2E.EMEA-Prod: +- name: CD_b2v-sms-statistics PROD-E2E +- mzName: CD_b2v-sms-statistics/management-zone/CDb2v-sms-statistics.name +- mzId: CD_b2v-sms-statistics/management-zone/CDb2v-sms-statistics.id +- tag: b2v-sms-statistics +- skipDeployment: "false" +CDb2v-sms-statistics-PROD-E2E.NA-Prod: +- name: CD_b2v-sms-statistics PROD-E2E +- mzName: CD_b2v-sms-statistics/management-zone/CDb2v-sms-statistics.name +- mzId: CD_b2v-sms-statistics/management-zone/CDb2v-sms-statistics.id +- tag: b2v-sms-statistics +- skipDeployment: "false" +CDb2v-sms-statistics-PROD-E2E.CN-Prod: +- name: CD_b2v-sms-statistics PROD-E2E +- mzName: CD_b2v-sms-statistics/management-zone/CDb2v-sms-statistics.name +- mzId: CD_b2v-sms-statistics/management-zone/CDb2v-sms-statistics.id +- tag: b2v-sms-statistics +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDb2v-sms-statistics-INT-TEST: +- name: CD_b2v-sms-statistics INT-TEST +- mzName: CD_b2v-sms-statistics/management-zone/CDb2v-sms-statistics.name +- mzId: CD_b2v-sms-statistics/management-zone/CDb2v-sms-statistics.id +- tag: b2v-sms-statistics +- skipDeployment: "true" +#Configuration +CDb2v-sms-statistics-INT-TEST.EMEA-PreProd: +- name: CD_b2v-sms-statistics INT-TEST +- mzName: CD_b2v-sms-statistics/management-zone/CDb2v-sms-statistics.name +- mzId: CD_b2v-sms-statistics/management-zone/CDb2v-sms-statistics.id +- tag: b2v-sms-statistics +- skipDeployment: "false" +CDb2v-sms-statistics-INT-TEST.NA-PreProd: +- name: CD_b2v-sms-statistics INT-TEST +- mzName: CD_b2v-sms-statistics/management-zone/CDb2v-sms-statistics.name +- mzId: CD_b2v-sms-statistics/management-zone/CDb2v-sms-statistics.id +- env: INT +- skipDeployment: "false" +CDb2v-sms-statistics-INT-TEST.CN-PreProd: +- name: CD_b2v-sms-statistics INT-TEST +- mzName: CD_b2v-sms-statistics/management-zone/CDb2v-sms-statistics.name +- mzId: CD_b2v-sms-statistics/management-zone/CDb2v-sms-statistics.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-sms-statistics/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_b2v-sms-statistics/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-sms-statistics/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-sms-statistics/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_b2v-sms-statistics/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-sms-statistics/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-sms-statistics/management-zone/README.md b/BMW-Dynatrace-config/CD_b2v-sms-statistics/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-sms-statistics/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_b2v-sms-statistics/management-zone/default.json b/BMW-Dynatrace-config/CD_b2v-sms-statistics/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-sms-statistics/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-sms-statistics/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_b2v-sms-statistics/management-zone/management-zone.yaml new file mode 100644 index 00000000..c90b8e12 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-sms-statistics/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDb2v-sms-statistics: default.json + +CDb2v-sms-statistics: +- name: CD_b2v-sms-statistics +- tag: b2v-sms-statistics diff --git a/BMW-Dynatrace-config/CD_b2v-sms-statistics/notification/README.md b/BMW-Dynatrace-config/CD_b2v-sms-statistics/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-sms-statistics/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-sms-statistics/notification/email.json b/BMW-Dynatrace-config/CD_b2v-sms-statistics/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-sms-statistics/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-sms-statistics/notification/msTeams.json b/BMW-Dynatrace-config/CD_b2v-sms-statistics/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-sms-statistics/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-sms-statistics/notification/notification.yaml b/BMW-Dynatrace-config/CD_b2v-sms-statistics/notification/notification.yaml new file mode 100644 index 00000000..49d30574 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-sms-statistics/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDb2v-sms-statistics-PROD: msTeams.json +- CDb2v-sms-statistics-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDb2v-sms-statistics-PROD: +- name: CD_b2v-sms-statistics PROD +- alertingProfile: CD_b2v-sms-statistics/alerting-profile/CDb2v-sms-statistics-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDb2v-sms-statistics-PROD.EMEA-Prod: +- name: CD_b2v-sms-statistics PROD +- alertingProfile: CD_b2v-sms-statistics/alerting-profile/CDb2v-sms-statistics-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDb2v-sms-statistics-PROD.NA-Prod: +- name: CD_b2v-sms-statistics PROD +- alertingProfile: CD_b2v-sms-statistics/alerting-profile/CDb2v-sms-statistics-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDb2v-sms-statistics-PROD.CN-Prod: +- name: CD_b2v-sms-statistics PROD +- alertingProfile: CD_b2v-sms-statistics/alerting-profile/CDb2v-sms-statistics-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDb2v-sms-statistics-INT: +- name: CD_b2v-sms-statistics INT +- alertingProfile: CD_b2v-sms-statistics/alerting-profile/CDb2v-sms-statistics-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDb2v-sms-statistics-INT.EMEA-PreProd: +- name: CD_b2v-sms-statistics INT +- alertingProfile: CD_b2v-sms-statistics/alerting-profile/CDb2v-sms-statistics-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDb2v-sms-statistics-INT.NA-PreProd: +- name: CD_b2v-sms-statistics INT +- alertingProfile: CD_b2v-sms-statistics/alerting-profile/CDb2v-sms-statistics-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDb2v-sms-statistics-INT.CN-PreProd: +- name: CD_b2v-sms-statistics INT +- alertingProfile: CD_b2v-sms-statistics/alerting-profile/CDb2v-sms-statistics-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-sms-statistics/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_b2v-sms-statistics/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-sms-statistics/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-sms-statistics/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_b2v-sms-statistics/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-sms-statistics/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-sms-statistics/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_b2v-sms-statistics/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..87fec292 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-sms-statistics/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- b2v-sms-statistics: default.json + +b2v-sms-statistics: +- name: CD_b2v-sms-statistics - +- mzName: CD_b2v-sms-statistics/management-zone/CDb2v-sms-statistics.name +- mzId: CD_b2v-sms-statistics/management-zone/CDb2v-sms-statistics.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..67aa1ba0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDbmw-points-push-notifications-service-PROD: default.json +- CDbmw-points-push-notifications-service-E2E: default.json +- CDbmw-points-push-notifications-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDbmw-points-push-notifications-service-PROD: +- name: CD_bmw-points-push-notifications-service PROD +- tag: bmw-points-push-notifications-service +- mzId: CD_bmw-points-push-notifications-service/management-zone/CDbmw-points-push-notifications-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDbmw-points-push-notifications-service-PROD.EMEA-Prod: +- name: CD_bmw-points-push-notifications-service PROD +- tag: bmw-points-push-notifications-service +- mzId: CD_bmw-points-push-notifications-service/management-zone/CDbmw-points-push-notifications-service.id +- env: PROD +- skipDeployment: "false" +CDbmw-points-push-notifications-service-PROD.NA-Prod: +- name: CD_bmw-points-push-notifications-service PROD +- tag: bmw-points-push-notifications-service +- mzId: CD_bmw-points-push-notifications-service/management-zone/CDbmw-points-push-notifications-service.id +- env: PROD +- skipDeployment: "false" +CDbmw-points-push-notifications-service-PROD.CN-Prod: +- name: CD_bmw-points-push-notifications-service PROD +- tag: bmw-points-push-notifications-service +- mzId: CD_bmw-points-push-notifications-service/management-zone/CDbmw-points-push-notifications-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDbmw-points-push-notifications-service-E2E: +- name: CD_bmw-points-push-notifications-service E2E +- tag: bmw-points-push-notifications-service +- mzId: CD_bmw-points-push-notifications-service/management-zone/CDbmw-points-push-notifications-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDbmw-points-push-notifications-service-E2E.EMEA-Prod: +- name: CD_bmw-points-push-notifications-service E2E +- tag: bmw-points-push-notifications-service +- mzId: CD_bmw-points-push-notifications-service/management-zone/CDbmw-points-push-notifications-service.id +- env: E2E +- skipDeployment: "false" +CDbmw-points-push-notifications-service-E2E.NA-Prod: +- name: CD_bmw-points-push-notifications-service E2E +- tag: bmw-points-push-notifications-service +- mzId: CD_bmw-points-push-notifications-service/management-zone/CDbmw-points-push-notifications-service.id +- env: E2E +- skipDeployment: "false" +CDbmw-points-push-notifications-service-E2E.CN-Prod: +- name: CD_bmw-points-push-notifications-service E2E +- tag: bmw-points-push-notifications-service +- mzId: CD_bmw-points-push-notifications-service/management-zone/CDbmw-points-push-notifications-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDbmw-points-push-notifications-service-INT: +- name: CD_bmw-points-push-notifications-service INT +- tag: bmw-points-push-notifications-service +- mzId: CD_bmw-points-push-notifications-service/management-zone/CDbmw-points-push-notifications-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDbmw-points-push-notifications-service-INT.EMEA-PreProd: +- name: CD_bmw-points-push-notifications-service INT +- tag: bmw-points-push-notifications-service +- mzId: CD_bmw-points-push-notifications-service/management-zone/CDbmw-points-push-notifications-service.id +- env: INT +- skipDeployment: "false" +CDbmw-points-push-notifications-service-INT.NA-PreProd: +- name: CD_bmw-points-push-notifications-service INT +- tag: bmw-points-push-notifications-service +- mzId: CD_bmw-points-push-notifications-service/management-zone/CDbmw-points-push-notifications-service.id +- env: INT +- skipDeployment: "false" +CDbmw-points-push-notifications-service-INT.CN-PreProd: +- name: CD_bmw-points-push-notifications-service INT +- tag: bmw-points-push-notifications-service +- mzId: CD_bmw-points-push-notifications-service/management-zone/CDbmw-points-push-notifications-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/dashboard/README.md b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..30ee6f43 --- /dev/null +++ b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDbmw-points-push-notifications-service-PROD-E2E: defaultPRODE2E.json +- CDbmw-points-push-notifications-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDbmw-points-push-notifications-service-PROD-E2E: +- name: CD_bmw-points-push-notifications-service PROD +- mzName: CD_bmw-points-push-notifications-service/management-zone/CDbmw-points-push-notifications-service.name +- mzId: CD_bmw-points-push-notifications-service/management-zone/CDbmw-points-push-notifications-service.id +- skipDeployment: "true" +#Configuration +CDbmw-points-push-notifications-service-PROD-E2E.EMEA-Prod: +- name: CD_bmw-points-push-notifications-service PROD +- mzName: CD_bmw-points-push-notifications-service/management-zone/CDbmw-points-push-notifications-service.name +- mzId: CD_bmw-points-push-notifications-service/management-zone/CDbmw-points-push-notifications-service.id +- tag: bmw-points-push-notifications-service +- skipDeployment: "false" +CDbmw-points-push-notifications-service-PROD-E2E.NA-Prod: +- name: CD_bmw-points-push-notifications-service PROD +- mzName: CD_bmw-points-push-notifications-service/management-zone/CDbmw-points-push-notifications-service.name +- mzId: CD_bmw-points-push-notifications-service/management-zone/CDbmw-points-push-notifications-service.id +- tag: bmw-points-push-notifications-service +- skipDeployment: "false" +CDbmw-points-push-notifications-service-PROD-E2E.CN-Prod: +- name: CD_bmw-points-push-notifications-service PROD +- mzName: CD_bmw-points-push-notifications-service/management-zone/CDbmw-points-push-notifications-service.name +- mzId: CD_bmw-points-push-notifications-service/management-zone/CDbmw-points-push-notifications-service.id +- tag: bmw-points-push-notifications-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDbmw-points-push-notifications-service-INT-TEST: +- name: CD_bmw-points-push-notifications-service INT-TEST +- mzName: CD_bmw-points-push-notifications-service/management-zone/CDbmw-points-push-notifications-service.name +- mzId: CD_bmw-points-push-notifications-service/management-zone/CDbmw-points-push-notifications-service.id +- tag: bmw-points-push-notifications-service +- skipDeployment: "true" +#Configuration +CDbmw-points-push-notifications-service-INT-TEST.EMEA-PreProd: +- name: CD_bmw-points-push-notifications-service INT-TEST +- mzName: CD_bmw-points-push-notifications-service/management-zone/CDbmw-points-push-notifications-service.name +- mzId: CD_bmw-points-push-notifications-service/management-zone/CDbmw-points-push-notifications-service.id +- tag: bmw-points-push-notifications-service +- skipDeployment: "false" +CDbmw-points-push-notifications-service-INT-TEST.NA-PreProd: +- name: CD_bmw-points-push-notifications-service INT-TEST +- mzName: CD_bmw-points-push-notifications-service/management-zone/CDbmw-points-push-notifications-service.name +- mzId: CD_bmw-points-push-notifications-service/management-zone/CDbmw-points-push-notifications-service.id +- env: INT +- skipDeployment: "false" +CDbmw-points-push-notifications-service-INT-TEST.CN-PreProd: +- name: CD_bmw-points-push-notifications-service INT-TEST +- mzName: CD_bmw-points-push-notifications-service/management-zone/CDbmw-points-push-notifications-service.name +- mzId: CD_bmw-points-push-notifications-service/management-zone/CDbmw-points-push-notifications-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/management-zone/README.md b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/management-zone/default.json b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..93494a20 --- /dev/null +++ b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDbmw-points-push-notifications-service: default.json + +CDbmw-points-push-notifications-service: +- name: CD_bmw-points-push-notifications-service +- tag: bmw-points-push-notifications-service diff --git a/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/notification/README.md b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/notification/email.json b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/notification/notification.yaml new file mode 100644 index 00000000..680c524a --- /dev/null +++ b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDbmw-points-push-notifications-service-PROD: msTeams.json +- CDbmw-points-push-notifications-service-E2E: msTeams.json +- CDbmw-points-push-notifications-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDbmw-points-push-notifications-service-PROD: +- name: CD_bmw-points-push-notifications-service PROD +- alertingProfile: CD_bmw-points-push-notifications-service/alerting-profile/CDbmw-points-push-notifications-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDbmw-points-push-notifications-service-PROD.EMEA-Prod: +- name: CD_bmw-points-push-notifications-service PROD +- alertingProfile: CD_bmw-points-push-notifications-service/alerting-profile/CDbmw-points-push-notifications-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDbmw-points-push-notifications-service-PROD.NA-Prod: +- name: CD_bmw-points-push-notifications-service PROD +- alertingProfile: CD_bmw-points-push-notifications-service/alerting-profile/CDbmw-points-push-notifications-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDbmw-points-push-notifications-service-PROD.CN-Prod: +- name: CD_bmw-points-push-notifications-service PROD +- alertingProfile: CD_bmw-points-push-notifications-service/alerting-profile/CDbmw-points-push-notifications-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDbmw-points-push-notifications-service-E2E: +- name: CD_bmw-points-push-notifications-service E2E +- alertingProfile: CD_bmw-points-push-notifications-service/alerting-profile/CDbmw-points-push-notifications-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDbmw-points-push-notifications-service-E2E.EMEA-Prod: +- name: CD_bmw-points-push-notifications-service E2E +- alertingProfile: CD_bmw-points-push-notifications-service/alerting-profile/CDbmw-points-push-notifications-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDbmw-points-push-notifications-service-E2E.NA-Prod: +- name: CD_bmw-points-push-notifications-service E2E +- alertingProfile: CD_bmw-points-push-notifications-service/alerting-profile/CDbmw-points-push-notifications-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDbmw-points-push-notifications-service-E2E.CN-Prod: +- name: CD_bmw-points-push-notifications-service E2E +- alertingProfile: CD_bmw-points-push-notifications-service/alerting-profile/CDbmw-points-push-notifications-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDbmw-points-push-notifications-service-INT: +- name: CD_bmw-points-push-notifications-service INT +- alertingProfile: CD_bmw-points-push-notifications-service/alerting-profile/CDbmw-points-push-notifications-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDbmw-points-push-notifications-service-INT.EMEA-PreProd: +- name: CD_bmw-points-push-notifications-service INT +- alertingProfile: CD_bmw-points-push-notifications-service/alerting-profile/CDbmw-points-push-notifications-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDbmw-points-push-notifications-service-INT.NA-PreProd: +- name: CD_bmw-points-push-notifications-service INT +- alertingProfile: CD_bmw-points-push-notifications-service/alerting-profile/CDbmw-points-push-notifications-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDbmw-points-push-notifications-service-INT.CN-PreProd: +- name: CD_bmw-points-push-notifications-service INT +- alertingProfile: CD_bmw-points-push-notifications-service/alerting-profile/CDbmw-points-push-notifications-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..95acd4d4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- bmw-points-push-notifications-service: default.json + +bmw-points-push-notifications-service: +- name: CD_bmw-points-push-notifications-service - +- mzName: CD_bmw-points-push-notifications-service/management-zone/CDbmw-points-push-notifications-service.name +- mzId: CD_bmw-points-push-notifications-service/management-zone/CDbmw-points-push-notifications-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bsi-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_bsi-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..f8aeb88f --- /dev/null +++ b/BMW-Dynatrace-config/CD_bsi-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDbsi-service-PROD: default.json +- CDbsi-service-E2E: default.json +- CDbsi-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDbsi-service-PROD: +- name: CD_bsi-service PROD +- tag: bsi-service +- mzId: CD_bsi-service/management-zone/CDbsi-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDbsi-service-PROD.EMEA-Prod: +- name: CD_bsi-service PROD +- tag: bsi-service +- mzId: CD_bsi-service/management-zone/CDbsi-service.id +- env: PROD +- skipDeployment: "false" +CDbsi-service-PROD.NA-Prod: +- name: CD_bsi-service PROD +- tag: bsi-service +- mzId: CD_bsi-service/management-zone/CDbsi-service.id +- env: PROD +- skipDeployment: "false" +CDbsi-service-PROD.CN-Prod: +- name: CD_bsi-service PROD +- tag: bsi-service +- mzId: CD_bsi-service/management-zone/CDbsi-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDbsi-service-E2E: +- name: CD_bsi-service E2E +- tag: bsi-service +- mzId: CD_bsi-service/management-zone/CDbsi-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDbsi-service-E2E.EMEA-Prod: +- name: CD_bsi-service E2E +- tag: bsi-service +- mzId: CD_bsi-service/management-zone/CDbsi-service.id +- env: E2E +- skipDeployment: "false" +CDbsi-service-E2E.NA-Prod: +- name: CD_bsi-service E2E +- tag: bsi-service +- mzId: CD_bsi-service/management-zone/CDbsi-service.id +- env: E2E +- skipDeployment: "false" +CDbsi-service-E2E.CN-Prod: +- name: CD_bsi-service E2E +- tag: bsi-service +- mzId: CD_bsi-service/management-zone/CDbsi-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDbsi-service-INT: +- name: CD_bsi-service INT +- tag: bsi-service +- mzId: CD_bsi-service/management-zone/CDbsi-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDbsi-service-INT.EMEA-PreProd: +- name: CD_bsi-service INT +- tag: bsi-service +- mzId: CD_bsi-service/management-zone/CDbsi-service.id +- env: INT +- skipDeployment: "false" +CDbsi-service-INT.NA-PreProd: +- name: CD_bsi-service INT +- tag: bsi-service +- mzId: CD_bsi-service/management-zone/CDbsi-service.id +- env: INT +- skipDeployment: "false" +CDbsi-service-INT.CN-PreProd: +- name: CD_bsi-service INT +- tag: bsi-service +- mzId: CD_bsi-service/management-zone/CDbsi-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bsi-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_bsi-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_bsi-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bsi-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_bsi-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_bsi-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bsi-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_bsi-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_bsi-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bsi-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_bsi-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_bsi-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bsi-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_bsi-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_bsi-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bsi-service/dashboard/README.md b/BMW-Dynatrace-config/CD_bsi-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_bsi-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bsi-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_bsi-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..858f3f2d --- /dev/null +++ b/BMW-Dynatrace-config/CD_bsi-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDbsi-service-PROD-E2E: defaultPRODE2E.json +- CDbsi-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDbsi-service-PROD-E2E: +- name: CD_bsi-service PROD +- mzName: CD_bsi-service/management-zone/CDbsi-service.name +- mzId: CD_bsi-service/management-zone/CDbsi-service.id +- skipDeployment: "true" +#Configuration +CDbsi-service-PROD-E2E.EMEA-Prod: +- name: CD_bsi-service PROD +- mzName: CD_bsi-service/management-zone/CDbsi-service.name +- mzId: CD_bsi-service/management-zone/CDbsi-service.id +- tag: bsi-service +- skipDeployment: "false" +CDbsi-service-PROD-E2E.NA-Prod: +- name: CD_bsi-service PROD +- mzName: CD_bsi-service/management-zone/CDbsi-service.name +- mzId: CD_bsi-service/management-zone/CDbsi-service.id +- tag: bsi-service +- skipDeployment: "false" +CDbsi-service-PROD-E2E.CN-Prod: +- name: CD_bsi-service PROD +- mzName: CD_bsi-service/management-zone/CDbsi-service.name +- mzId: CD_bsi-service/management-zone/CDbsi-service.id +- tag: bsi-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDbsi-service-INT-TEST: +- name: CD_bsi-service INT-TEST +- mzName: CD_bsi-service/management-zone/CDbsi-service.name +- mzId: CD_bsi-service/management-zone/CDbsi-service.id +- tag: bsi-service +- skipDeployment: "true" +#Configuration +CDbsi-service-INT-TEST.EMEA-PreProd: +- name: CD_bsi-service INT-TEST +- mzName: CD_bsi-service/management-zone/CDbsi-service.name +- mzId: CD_bsi-service/management-zone/CDbsi-service.id +- tag: bsi-service +- skipDeployment: "false" +CDbsi-service-INT-TEST.NA-PreProd: +- name: CD_bsi-service INT-TEST +- mzName: CD_bsi-service/management-zone/CDbsi-service.name +- mzId: CD_bsi-service/management-zone/CDbsi-service.id +- env: INT +- skipDeployment: "false" +CDbsi-service-INT-TEST.CN-PreProd: +- name: CD_bsi-service INT-TEST +- mzName: CD_bsi-service/management-zone/CDbsi-service.name +- mzId: CD_bsi-service/management-zone/CDbsi-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bsi-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_bsi-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_bsi-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bsi-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_bsi-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_bsi-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bsi-service/management-zone/README.md b/BMW-Dynatrace-config/CD_bsi-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_bsi-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_bsi-service/management-zone/default.json b/BMW-Dynatrace-config/CD_bsi-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_bsi-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bsi-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_bsi-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..e0077fcb --- /dev/null +++ b/BMW-Dynatrace-config/CD_bsi-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDbsi-service: default.json + +CDbsi-service: +- name: CD_bsi-service +- tag: bsi-service diff --git a/BMW-Dynatrace-config/CD_bsi-service/notification/README.md b/BMW-Dynatrace-config/CD_bsi-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_bsi-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bsi-service/notification/email.json b/BMW-Dynatrace-config/CD_bsi-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_bsi-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bsi-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_bsi-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_bsi-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bsi-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_bsi-service/notification/notification.yaml new file mode 100644 index 00000000..8c78cbf0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_bsi-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDbsi-service-PROD: msTeams.json +- CDbsi-service-E2E: msTeams.json +- CDbsi-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDbsi-service-PROD: +- name: CD_bsi-service PROD +- alertingProfile: CD_bsi-service/alerting-profile/CDbsi-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDbsi-service-PROD.EMEA-Prod: +- name: CD_bsi-service PROD +- alertingProfile: CD_bsi-service/alerting-profile/CDbsi-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDbsi-service-PROD.NA-Prod: +- name: CD_bsi-service PROD +- alertingProfile: CD_bsi-service/alerting-profile/CDbsi-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDbsi-service-PROD.CN-Prod: +- name: CD_bsi-service PROD +- alertingProfile: CD_bsi-service/alerting-profile/CDbsi-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDbsi-service-E2E: +- name: CD_bsi-service E2E +- alertingProfile: CD_bsi-service/alerting-profile/CDbsi-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDbsi-service-E2E.EMEA-Prod: +- name: CD_bsi-service E2E +- alertingProfile: CD_bsi-service/alerting-profile/CDbsi-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDbsi-service-E2E.NA-Prod: +- name: CD_bsi-service E2E +- alertingProfile: CD_bsi-service/alerting-profile/CDbsi-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDbsi-service-E2E.CN-Prod: +- name: CD_bsi-service E2E +- alertingProfile: CD_bsi-service/alerting-profile/CDbsi-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDbsi-service-INT: +- name: CD_bsi-service INT +- alertingProfile: CD_bsi-service/alerting-profile/CDbsi-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDbsi-service-INT.EMEA-PreProd: +- name: CD_bsi-service INT +- alertingProfile: CD_bsi-service/alerting-profile/CDbsi-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDbsi-service-INT.NA-PreProd: +- name: CD_bsi-service INT +- alertingProfile: CD_bsi-service/alerting-profile/CDbsi-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDbsi-service-INT.CN-PreProd: +- name: CD_bsi-service INT +- alertingProfile: CD_bsi-service/alerting-profile/CDbsi-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bsi-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_bsi-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_bsi-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bsi-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_bsi-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_bsi-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bsi-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_bsi-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..b3135dd0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_bsi-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- bsi-service: default.json + +bsi-service: +- name: CD_bsi-service - +- mzName: CD_bsi-service/management-zone/CDbsi-service.name +- mzId: CD_bsi-service/management-zone/CDbsi-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cac/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_cac/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..04d842db --- /dev/null +++ b/BMW-Dynatrace-config/CD_cac/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDcac-PROD: default.json +- CDcac-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDcac-PROD: +- name: CD_cac PROD +- tag: cac +- mzId: CD_cac/management-zone/CDcac.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDcac-PROD.EMEA-Prod: +- name: CD_cac PROD +- tag: cac +- mzId: CD_cac/management-zone/CDcac.id +- env: PROD +- skipDeployment: "false" +CDcac-PROD.NA-Prod: +- name: CD_cac PROD +- tag: cac +- mzId: CD_cac/management-zone/CDcac.id +- env: PROD +- skipDeployment: "false" +CDcac-PROD.CN-Prod: +- name: CD_cac PROD +- tag: cac +- mzId: CD_cac/management-zone/CDcac.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDcac-INT: +- name: CD_cac INT +- tag: cac +- mzId: CD_cac/management-zone/CDcac.id +- env: INT +- skipDeployment: "true" +#Configuration +CDcac-INT.EMEA-PreProd: +- name: CD_cac INT +- tag: cac +- mzId: CD_cac/management-zone/CDcac.id +- env: INT +- skipDeployment: "false" +CDcac-INT.NA-PreProd: +- name: CD_cac INT +- tag: cac +- mzId: CD_cac/management-zone/CDcac.id +- env: INT +- skipDeployment: "false" +CDcac-INT.CN-PreProd: +- name: CD_cac INT +- tag: cac +- mzId: CD_cac/management-zone/CDcac.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cac/alerting-profile/default.json b/BMW-Dynatrace-config/CD_cac/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cac/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cac/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_cac/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_cac/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cac/custom-service-java/README.md b/BMW-Dynatrace-config/CD_cac/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cac/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cac/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_cac/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cac/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cac/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_cac/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cac/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cac/dashboard/README.md b/BMW-Dynatrace-config/CD_cac/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_cac/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cac/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_cac/dashboard/dashboard.yaml new file mode 100644 index 00000000..8a3afbeb --- /dev/null +++ b/BMW-Dynatrace-config/CD_cac/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDcac-PROD-E2E: defaultPRODE2E.json +- CDcac-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDcac-PROD-E2E: +- name: CD_cac PROD-E2E +- mzName: CD_cac/management-zone/CDcac.name +- mzId: CD_cac/management-zone/CDcac.id +- skipDeployment: "true" +#Configuration +CDcac-PROD-E2E.EMEA-Prod: +- name: CD_cac PROD-E2E +- mzName: CD_cac/management-zone/CDcac.name +- mzId: CD_cac/management-zone/CDcac.id +- tag: cac +- skipDeployment: "false" +CDcac-PROD-E2E.NA-Prod: +- name: CD_cac PROD-E2E +- mzName: CD_cac/management-zone/CDcac.name +- mzId: CD_cac/management-zone/CDcac.id +- tag: cac +- skipDeployment: "false" +CDcac-PROD-E2E.CN-Prod: +- name: CD_cac PROD-E2E +- mzName: CD_cac/management-zone/CDcac.name +- mzId: CD_cac/management-zone/CDcac.id +- tag: cac +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDcac-INT-TEST: +- name: CD_cac INT-TEST +- mzName: CD_cac/management-zone/CDcac.name +- mzId: CD_cac/management-zone/CDcac.id +- tag: cac +- skipDeployment: "true" +#Configuration +CDcac-INT-TEST.EMEA-PreProd: +- name: CD_cac INT-TEST +- mzName: CD_cac/management-zone/CDcac.name +- mzId: CD_cac/management-zone/CDcac.id +- tag: cac +- skipDeployment: "false" +CDcac-INT-TEST.NA-PreProd: +- name: CD_cac INT-TEST +- mzName: CD_cac/management-zone/CDcac.name +- mzId: CD_cac/management-zone/CDcac.id +- env: INT +- skipDeployment: "false" +CDcac-INT-TEST.CN-PreProd: +- name: CD_cac INT-TEST +- mzName: CD_cac/management-zone/CDcac.name +- mzId: CD_cac/management-zone/CDcac.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cac/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_cac/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cac/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cac/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_cac/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cac/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cac/management-zone/README.md b/BMW-Dynatrace-config/CD_cac/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cac/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_cac/management-zone/default.json b/BMW-Dynatrace-config/CD_cac/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_cac/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cac/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_cac/management-zone/management-zone.yaml new file mode 100644 index 00000000..f7e42118 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cac/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDcac: default.json + +CDcac: +- name: CD_cac +- tag: cac diff --git a/BMW-Dynatrace-config/CD_cac/notification/README.md b/BMW-Dynatrace-config/CD_cac/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cac/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cac/notification/email.json b/BMW-Dynatrace-config/CD_cac/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cac/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cac/notification/msTeams.json b/BMW-Dynatrace-config/CD_cac/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cac/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cac/notification/notification.yaml b/BMW-Dynatrace-config/CD_cac/notification/notification.yaml new file mode 100644 index 00000000..8860aacd --- /dev/null +++ b/BMW-Dynatrace-config/CD_cac/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDcac-PROD: msTeams.json +- CDcac-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcac-PROD: +- name: CD_cac PROD +- alertingProfile: CD_cac/alerting-profile/CDcac-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcac-PROD.EMEA-Prod: +- name: CD_cac PROD +- alertingProfile: CD_cac/alerting-profile/CDcac-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDcac-PROD.NA-Prod: +- name: CD_cac PROD +- alertingProfile: CD_cac/alerting-profile/CDcac-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDcac-PROD.CN-Prod: +- name: CD_cac PROD +- alertingProfile: CD_cac/alerting-profile/CDcac-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcac-INT: +- name: CD_cac INT +- alertingProfile: CD_cac/alerting-profile/CDcac-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcac-INT.EMEA-PreProd: +- name: CD_cac INT +- alertingProfile: CD_cac/alerting-profile/CDcac-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDcac-INT.NA-PreProd: +- name: CD_cac INT +- alertingProfile: CD_cac/alerting-profile/CDcac-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDcac-INT.CN-PreProd: +- name: CD_cac INT +- alertingProfile: CD_cac/alerting-profile/CDcac-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cac/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_cac/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_cac/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cac/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_cac/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_cac/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cac/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_cac/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..4eeeeffc --- /dev/null +++ b/BMW-Dynatrace-config/CD_cac/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- cac: default.json + +cac: +- name: CD_cac - +- mzName: CD_cac/management-zone/CDcac.name +- mzId: CD_cac/management-zone/CDcac.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_casa-event-processor/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_casa-event-processor/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..4412aa9c --- /dev/null +++ b/BMW-Dynatrace-config/CD_casa-event-processor/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDcasa-event-processor-PROD: default.json +- CDcasa-event-processor-E2E: default.json +- CDcasa-event-processor-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcasa-event-processor-PROD: +- name: CD_casa-event-processor PROD +- tag: casa-event-processor +- mzId: CD_casa-event-processor/management-zone/CDcasa-event-processor.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDcasa-event-processor-PROD.EMEA-Prod: +- name: CD_casa-event-processor PROD +- tag: casa-event-processor +- mzId: CD_casa-event-processor/management-zone/CDcasa-event-processor.id +- env: PROD +- skipDeployment: "false" +CDcasa-event-processor-PROD.NA-Prod: +- name: CD_casa-event-processor PROD +- tag: casa-event-processor +- mzId: CD_casa-event-processor/management-zone/CDcasa-event-processor.id +- env: PROD +- skipDeployment: "false" +CDcasa-event-processor-PROD.CN-Prod: +- name: CD_casa-event-processor PROD +- tag: casa-event-processor +- mzId: CD_casa-event-processor/management-zone/CDcasa-event-processor.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcasa-event-processor-E2E: +- name: CD_casa-event-processor E2E +- tag: casa-event-processor +- mzId: CD_casa-event-processor/management-zone/CDcasa-event-processor.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDcasa-event-processor-E2E.EMEA-Prod: +- name: CD_casa-event-processor E2E +- tag: casa-event-processor +- mzId: CD_casa-event-processor/management-zone/CDcasa-event-processor.id +- env: E2E +- skipDeployment: "false" +CDcasa-event-processor-E2E.NA-Prod: +- name: CD_casa-event-processor E2E +- tag: casa-event-processor +- mzId: CD_casa-event-processor/management-zone/CDcasa-event-processor.id +- env: E2E +- skipDeployment: "false" +CDcasa-event-processor-E2E.CN-Prod: +- name: CD_casa-event-processor E2E +- tag: casa-event-processor +- mzId: CD_casa-event-processor/management-zone/CDcasa-event-processor.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcasa-event-processor-INT: +- name: CD_casa-event-processor INT +- tag: casa-event-processor +- mzId: CD_casa-event-processor/management-zone/CDcasa-event-processor.id +- env: INT +- skipDeployment: "true" +#Configuration +CDcasa-event-processor-INT.EMEA-PreProd: +- name: CD_casa-event-processor INT +- tag: casa-event-processor +- mzId: CD_casa-event-processor/management-zone/CDcasa-event-processor.id +- env: INT +- skipDeployment: "false" +CDcasa-event-processor-INT.NA-PreProd: +- name: CD_casa-event-processor INT +- tag: casa-event-processor +- mzId: CD_casa-event-processor/management-zone/CDcasa-event-processor.id +- env: INT +- skipDeployment: "false" +CDcasa-event-processor-INT.CN-PreProd: +- name: CD_casa-event-processor INT +- tag: casa-event-processor +- mzId: CD_casa-event-processor/management-zone/CDcasa-event-processor.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_casa-event-processor/alerting-profile/default.json b/BMW-Dynatrace-config/CD_casa-event-processor/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_casa-event-processor/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_casa-event-processor/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_casa-event-processor/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_casa-event-processor/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_casa-event-processor/custom-service-java/README.md b/BMW-Dynatrace-config/CD_casa-event-processor/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_casa-event-processor/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_casa-event-processor/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_casa-event-processor/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_casa-event-processor/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_casa-event-processor/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_casa-event-processor/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_casa-event-processor/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_casa-event-processor/dashboard/README.md b/BMW-Dynatrace-config/CD_casa-event-processor/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_casa-event-processor/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_casa-event-processor/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_casa-event-processor/dashboard/dashboard.yaml new file mode 100644 index 00000000..1629117e --- /dev/null +++ b/BMW-Dynatrace-config/CD_casa-event-processor/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDcasa-event-processor-PROD-E2E: defaultPRODE2E.json +- CDcasa-event-processor-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDcasa-event-processor-PROD-E2E: +- name: CD_casa-event-processor PROD +- mzName: CD_casa-event-processor/management-zone/CDcasa-event-processor.name +- mzId: CD_casa-event-processor/management-zone/CDcasa-event-processor.id +- skipDeployment: "true" +#Configuration +CDcasa-event-processor-PROD-E2E.EMEA-Prod: +- name: CD_casa-event-processor PROD +- mzName: CD_casa-event-processor/management-zone/CDcasa-event-processor.name +- mzId: CD_casa-event-processor/management-zone/CDcasa-event-processor.id +- tag: casa-event-processor +- skipDeployment: "false" +CDcasa-event-processor-PROD-E2E.NA-Prod: +- name: CD_casa-event-processor PROD +- mzName: CD_casa-event-processor/management-zone/CDcasa-event-processor.name +- mzId: CD_casa-event-processor/management-zone/CDcasa-event-processor.id +- tag: casa-event-processor +- skipDeployment: "false" +CDcasa-event-processor-PROD-E2E.CN-Prod: +- name: CD_casa-event-processor PROD +- mzName: CD_casa-event-processor/management-zone/CDcasa-event-processor.name +- mzId: CD_casa-event-processor/management-zone/CDcasa-event-processor.id +- tag: casa-event-processor +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDcasa-event-processor-INT-TEST: +- name: CD_casa-event-processor INT-TEST +- mzName: CD_casa-event-processor/management-zone/CDcasa-event-processor.name +- mzId: CD_casa-event-processor/management-zone/CDcasa-event-processor.id +- tag: casa-event-processor +- skipDeployment: "true" +#Configuration +CDcasa-event-processor-INT-TEST.EMEA-PreProd: +- name: CD_casa-event-processor INT-TEST +- mzName: CD_casa-event-processor/management-zone/CDcasa-event-processor.name +- mzId: CD_casa-event-processor/management-zone/CDcasa-event-processor.id +- tag: casa-event-processor +- skipDeployment: "false" +CDcasa-event-processor-INT-TEST.NA-PreProd: +- name: CD_casa-event-processor INT-TEST +- mzName: CD_casa-event-processor/management-zone/CDcasa-event-processor.name +- mzId: CD_casa-event-processor/management-zone/CDcasa-event-processor.id +- env: INT +- skipDeployment: "false" +CDcasa-event-processor-INT-TEST.CN-PreProd: +- name: CD_casa-event-processor INT-TEST +- mzName: CD_casa-event-processor/management-zone/CDcasa-event-processor.name +- mzId: CD_casa-event-processor/management-zone/CDcasa-event-processor.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_casa-event-processor/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_casa-event-processor/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_casa-event-processor/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_casa-event-processor/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_casa-event-processor/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_casa-event-processor/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_casa-event-processor/management-zone/README.md b/BMW-Dynatrace-config/CD_casa-event-processor/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_casa-event-processor/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_casa-event-processor/management-zone/default.json b/BMW-Dynatrace-config/CD_casa-event-processor/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_casa-event-processor/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_casa-event-processor/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_casa-event-processor/management-zone/management-zone.yaml new file mode 100644 index 00000000..5f3c2432 --- /dev/null +++ b/BMW-Dynatrace-config/CD_casa-event-processor/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDcasa-event-processor: default.json + +CDcasa-event-processor: +- name: CD_casa-event-processor +- tag: casa-event-processor diff --git a/BMW-Dynatrace-config/CD_casa-event-processor/notification/README.md b/BMW-Dynatrace-config/CD_casa-event-processor/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_casa-event-processor/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_casa-event-processor/notification/email.json b/BMW-Dynatrace-config/CD_casa-event-processor/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_casa-event-processor/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_casa-event-processor/notification/msTeams.json b/BMW-Dynatrace-config/CD_casa-event-processor/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_casa-event-processor/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_casa-event-processor/notification/notification.yaml b/BMW-Dynatrace-config/CD_casa-event-processor/notification/notification.yaml new file mode 100644 index 00000000..878601e8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_casa-event-processor/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDcasa-event-processor-PROD: msTeams.json +- CDcasa-event-processor-E2E: msTeams.json +- CDcasa-event-processor-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcasa-event-processor-PROD: +- name: CD_casa-event-processor PROD +- alertingProfile: CD_casa-event-processor/alerting-profile/CDcasa-event-processor-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcasa-event-processor-PROD.EMEA-Prod: +- name: CD_casa-event-processor PROD +- alertingProfile: CD_casa-event-processor/alerting-profile/CDcasa-event-processor-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDcasa-event-processor-PROD.NA-Prod: +- name: CD_casa-event-processor PROD +- alertingProfile: CD_casa-event-processor/alerting-profile/CDcasa-event-processor-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDcasa-event-processor-PROD.CN-Prod: +- name: CD_casa-event-processor PROD +- alertingProfile: CD_casa-event-processor/alerting-profile/CDcasa-event-processor-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcasa-event-processor-E2E: +- name: CD_casa-event-processor E2E +- alertingProfile: CD_casa-event-processor/alerting-profile/CDcasa-event-processor-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcasa-event-processor-E2E.EMEA-Prod: +- name: CD_casa-event-processor E2E +- alertingProfile: CD_casa-event-processor/alerting-profile/CDcasa-event-processor-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDcasa-event-processor-E2E.NA-Prod: +- name: CD_casa-event-processor E2E +- alertingProfile: CD_casa-event-processor/alerting-profile/CDcasa-event-processor-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDcasa-event-processor-E2E.CN-Prod: +- name: CD_casa-event-processor E2E +- alertingProfile: CD_casa-event-processor/alerting-profile/CDcasa-event-processor-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcasa-event-processor-INT: +- name: CD_casa-event-processor INT +- alertingProfile: CD_casa-event-processor/alerting-profile/CDcasa-event-processor-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcasa-event-processor-INT.EMEA-PreProd: +- name: CD_casa-event-processor INT +- alertingProfile: CD_casa-event-processor/alerting-profile/CDcasa-event-processor-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDcasa-event-processor-INT.NA-PreProd: +- name: CD_casa-event-processor INT +- alertingProfile: CD_casa-event-processor/alerting-profile/CDcasa-event-processor-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDcasa-event-processor-INT.CN-PreProd: +- name: CD_casa-event-processor INT +- alertingProfile: CD_casa-event-processor/alerting-profile/CDcasa-event-processor-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_casa-event-processor/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_casa-event-processor/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_casa-event-processor/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_casa-event-processor/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_casa-event-processor/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_casa-event-processor/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_casa-event-processor/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_casa-event-processor/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..8dff9bb4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_casa-event-processor/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- casa-event-processor: default.json + +casa-event-processor: +- name: CD_casa-event-processor - +- mzName: CD_casa-event-processor/management-zone/CDcasa-event-processor.name +- mzId: CD_casa-event-processor/management-zone/CDcasa-event-processor.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdc/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_cdc/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..0a4dffd4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdc/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDcdc-PROD: default.json +- CDcdc-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDcdc-PROD: +- name: CD_cdc PROD +- tag: cdc +- mzId: CD_cdc/management-zone/CDcdc.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDcdc-PROD.EMEA-Prod: +- name: CD_cdc PROD +- tag: cdc +- mzId: CD_cdc/management-zone/CDcdc.id +- env: PROD +- skipDeployment: "false" +CDcdc-PROD.NA-Prod: +- name: CD_cdc PROD +- tag: cdc +- mzId: CD_cdc/management-zone/CDcdc.id +- env: PROD +- skipDeployment: "false" +CDcdc-PROD.CN-Prod: +- name: CD_cdc PROD +- tag: cdc +- mzId: CD_cdc/management-zone/CDcdc.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDcdc-INT: +- name: CD_cdc INT +- tag: cdc +- mzId: CD_cdc/management-zone/CDcdc.id +- env: INT +- skipDeployment: "true" +#Configuration +CDcdc-INT.EMEA-PreProd: +- name: CD_cdc INT +- tag: cdc +- mzId: CD_cdc/management-zone/CDcdc.id +- env: INT +- skipDeployment: "false" +CDcdc-INT.NA-PreProd: +- name: CD_cdc INT +- tag: cdc +- mzId: CD_cdc/management-zone/CDcdc.id +- env: INT +- skipDeployment: "false" +CDcdc-INT.CN-PreProd: +- name: CD_cdc INT +- tag: cdc +- mzId: CD_cdc/management-zone/CDcdc.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdc/alerting-profile/default.json b/BMW-Dynatrace-config/CD_cdc/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdc/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdc/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_cdc/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdc/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdc/custom-service-java/README.md b/BMW-Dynatrace-config/CD_cdc/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdc/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdc/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_cdc/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdc/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdc/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_cdc/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdc/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdc/dashboard/README.md b/BMW-Dynatrace-config/CD_cdc/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdc/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdc/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_cdc/dashboard/dashboard.yaml new file mode 100644 index 00000000..7c270146 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdc/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDcdc-PROD-E2E: defaultPRODE2E.json +- CDcdc-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDcdc-PROD-E2E: +- name: CD_cdc PROD-E2E +- mzName: CD_cdc/management-zone/CDcdc.name +- mzId: CD_cdc/management-zone/CDcdc.id +- skipDeployment: "true" +#Configuration +CDcdc-PROD-E2E.EMEA-Prod: +- name: CD_cdc PROD-E2E +- mzName: CD_cdc/management-zone/CDcdc.name +- mzId: CD_cdc/management-zone/CDcdc.id +- tag: cdc +- skipDeployment: "false" +CDcdc-PROD-E2E.NA-Prod: +- name: CD_cdc PROD-E2E +- mzName: CD_cdc/management-zone/CDcdc.name +- mzId: CD_cdc/management-zone/CDcdc.id +- tag: cdc +- skipDeployment: "false" +CDcdc-PROD-E2E.CN-Prod: +- name: CD_cdc PROD-E2E +- mzName: CD_cdc/management-zone/CDcdc.name +- mzId: CD_cdc/management-zone/CDcdc.id +- tag: cdc +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDcdc-INT-TEST: +- name: CD_cdc INT-TEST +- mzName: CD_cdc/management-zone/CDcdc.name +- mzId: CD_cdc/management-zone/CDcdc.id +- tag: cdc +- skipDeployment: "true" +#Configuration +CDcdc-INT-TEST.EMEA-PreProd: +- name: CD_cdc INT-TEST +- mzName: CD_cdc/management-zone/CDcdc.name +- mzId: CD_cdc/management-zone/CDcdc.id +- tag: cdc +- skipDeployment: "false" +CDcdc-INT-TEST.NA-PreProd: +- name: CD_cdc INT-TEST +- mzName: CD_cdc/management-zone/CDcdc.name +- mzId: CD_cdc/management-zone/CDcdc.id +- env: INT +- skipDeployment: "false" +CDcdc-INT-TEST.CN-PreProd: +- name: CD_cdc INT-TEST +- mzName: CD_cdc/management-zone/CDcdc.name +- mzId: CD_cdc/management-zone/CDcdc.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdc/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_cdc/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdc/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdc/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_cdc/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdc/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdc/management-zone/README.md b/BMW-Dynatrace-config/CD_cdc/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdc/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_cdc/management-zone/default.json b/BMW-Dynatrace-config/CD_cdc/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdc/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdc/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_cdc/management-zone/management-zone.yaml new file mode 100644 index 00000000..54c99ae0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdc/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDcdc: default.json + +CDcdc: +- name: CD_cdc +- tag: cdc diff --git a/BMW-Dynatrace-config/CD_cdc/notification/README.md b/BMW-Dynatrace-config/CD_cdc/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdc/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdc/notification/email.json b/BMW-Dynatrace-config/CD_cdc/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdc/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdc/notification/msTeams.json b/BMW-Dynatrace-config/CD_cdc/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdc/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdc/notification/notification.yaml b/BMW-Dynatrace-config/CD_cdc/notification/notification.yaml new file mode 100644 index 00000000..efd3ff2c --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdc/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDcdc-PROD: msTeams.json +- CDcdc-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcdc-PROD: +- name: CD_cdc PROD +- alertingProfile: CD_cdc/alerting-profile/CDcdc-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcdc-PROD.EMEA-Prod: +- name: CD_cdc PROD +- alertingProfile: CD_cdc/alerting-profile/CDcdc-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDcdc-PROD.NA-Prod: +- name: CD_cdc PROD +- alertingProfile: CD_cdc/alerting-profile/CDcdc-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDcdc-PROD.CN-Prod: +- name: CD_cdc PROD +- alertingProfile: CD_cdc/alerting-profile/CDcdc-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcdc-INT: +- name: CD_cdc INT +- alertingProfile: CD_cdc/alerting-profile/CDcdc-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcdc-INT.EMEA-PreProd: +- name: CD_cdc INT +- alertingProfile: CD_cdc/alerting-profile/CDcdc-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDcdc-INT.NA-PreProd: +- name: CD_cdc INT +- alertingProfile: CD_cdc/alerting-profile/CDcdc-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDcdc-INT.CN-PreProd: +- name: CD_cdc INT +- alertingProfile: CD_cdc/alerting-profile/CDcdc-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdc/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_cdc/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdc/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdc/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_cdc/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdc/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdc/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_cdc/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..2b017e85 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdc/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- cdc: default.json + +cdc: +- name: CD_cdc - +- mzName: CD_cdc/management-zone/CDcdc.name +- mzId: CD_cdc/management-zone/CDcdc.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdcicd-jenkins/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_cdcicd-jenkins/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..24859b3d --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdcicd-jenkins/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDcdcicd-jenkins-PROD: default.json +- CDcdcicd-jenkins-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDcdcicd-jenkins-PROD: +- name: CD_cdcicd-jenkins PROD +- tag: cdcicd-jenkins +- mzId: CD_cdcicd-jenkins/management-zone/CDcdcicd-jenkins.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDcdcicd-jenkins-PROD.EMEA-Prod: +- name: CD_cdcicd-jenkins PROD +- tag: cdcicd-jenkins +- mzId: CD_cdcicd-jenkins/management-zone/CDcdcicd-jenkins.id +- env: PROD +- skipDeployment: "false" +CDcdcicd-jenkins-PROD.NA-Prod: +- name: CD_cdcicd-jenkins PROD +- tag: cdcicd-jenkins +- mzId: CD_cdcicd-jenkins/management-zone/CDcdcicd-jenkins.id +- env: PROD +- skipDeployment: "false" +CDcdcicd-jenkins-PROD.CN-Prod: +- name: CD_cdcicd-jenkins PROD +- tag: cdcicd-jenkins +- mzId: CD_cdcicd-jenkins/management-zone/CDcdcicd-jenkins.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDcdcicd-jenkins-INT: +- name: CD_cdcicd-jenkins INT +- tag: cdcicd-jenkins +- mzId: CD_cdcicd-jenkins/management-zone/CDcdcicd-jenkins.id +- env: INT +- skipDeployment: "true" +#Configuration +CDcdcicd-jenkins-INT.EMEA-PreProd: +- name: CD_cdcicd-jenkins INT +- tag: cdcicd-jenkins +- mzId: CD_cdcicd-jenkins/management-zone/CDcdcicd-jenkins.id +- env: INT +- skipDeployment: "false" +CDcdcicd-jenkins-INT.NA-PreProd: +- name: CD_cdcicd-jenkins INT +- tag: cdcicd-jenkins +- mzId: CD_cdcicd-jenkins/management-zone/CDcdcicd-jenkins.id +- env: INT +- skipDeployment: "false" +CDcdcicd-jenkins-INT.CN-PreProd: +- name: CD_cdcicd-jenkins INT +- tag: cdcicd-jenkins +- mzId: CD_cdcicd-jenkins/management-zone/CDcdcicd-jenkins.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdcicd-jenkins/alerting-profile/default.json b/BMW-Dynatrace-config/CD_cdcicd-jenkins/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdcicd-jenkins/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdcicd-jenkins/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_cdcicd-jenkins/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdcicd-jenkins/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdcicd-jenkins/custom-service-java/README.md b/BMW-Dynatrace-config/CD_cdcicd-jenkins/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdcicd-jenkins/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdcicd-jenkins/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_cdcicd-jenkins/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdcicd-jenkins/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdcicd-jenkins/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_cdcicd-jenkins/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdcicd-jenkins/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdcicd-jenkins/dashboard/README.md b/BMW-Dynatrace-config/CD_cdcicd-jenkins/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdcicd-jenkins/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdcicd-jenkins/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_cdcicd-jenkins/dashboard/dashboard.yaml new file mode 100644 index 00000000..662e983b --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdcicd-jenkins/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDcdcicd-jenkins-PROD-E2E: defaultPRODE2E.json +- CDcdcicd-jenkins-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDcdcicd-jenkins-PROD-E2E: +- name: CD_cdcicd-jenkins PROD-E2E +- mzName: CD_cdcicd-jenkins/management-zone/CDcdcicd-jenkins.name +- mzId: CD_cdcicd-jenkins/management-zone/CDcdcicd-jenkins.id +- skipDeployment: "true" +#Configuration +CDcdcicd-jenkins-PROD-E2E.EMEA-Prod: +- name: CD_cdcicd-jenkins PROD-E2E +- mzName: CD_cdcicd-jenkins/management-zone/CDcdcicd-jenkins.name +- mzId: CD_cdcicd-jenkins/management-zone/CDcdcicd-jenkins.id +- tag: cdcicd-jenkins +- skipDeployment: "false" +CDcdcicd-jenkins-PROD-E2E.NA-Prod: +- name: CD_cdcicd-jenkins PROD-E2E +- mzName: CD_cdcicd-jenkins/management-zone/CDcdcicd-jenkins.name +- mzId: CD_cdcicd-jenkins/management-zone/CDcdcicd-jenkins.id +- tag: cdcicd-jenkins +- skipDeployment: "false" +CDcdcicd-jenkins-PROD-E2E.CN-Prod: +- name: CD_cdcicd-jenkins PROD-E2E +- mzName: CD_cdcicd-jenkins/management-zone/CDcdcicd-jenkins.name +- mzId: CD_cdcicd-jenkins/management-zone/CDcdcicd-jenkins.id +- tag: cdcicd-jenkins +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDcdcicd-jenkins-INT-TEST: +- name: CD_cdcicd-jenkins INT-TEST +- mzName: CD_cdcicd-jenkins/management-zone/CDcdcicd-jenkins.name +- mzId: CD_cdcicd-jenkins/management-zone/CDcdcicd-jenkins.id +- tag: cdcicd-jenkins +- skipDeployment: "true" +#Configuration +CDcdcicd-jenkins-INT-TEST.EMEA-PreProd: +- name: CD_cdcicd-jenkins INT-TEST +- mzName: CD_cdcicd-jenkins/management-zone/CDcdcicd-jenkins.name +- mzId: CD_cdcicd-jenkins/management-zone/CDcdcicd-jenkins.id +- tag: cdcicd-jenkins +- skipDeployment: "false" +CDcdcicd-jenkins-INT-TEST.NA-PreProd: +- name: CD_cdcicd-jenkins INT-TEST +- mzName: CD_cdcicd-jenkins/management-zone/CDcdcicd-jenkins.name +- mzId: CD_cdcicd-jenkins/management-zone/CDcdcicd-jenkins.id +- env: INT +- skipDeployment: "false" +CDcdcicd-jenkins-INT-TEST.CN-PreProd: +- name: CD_cdcicd-jenkins INT-TEST +- mzName: CD_cdcicd-jenkins/management-zone/CDcdcicd-jenkins.name +- mzId: CD_cdcicd-jenkins/management-zone/CDcdcicd-jenkins.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdcicd-jenkins/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_cdcicd-jenkins/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdcicd-jenkins/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdcicd-jenkins/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_cdcicd-jenkins/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdcicd-jenkins/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdcicd-jenkins/management-zone/README.md b/BMW-Dynatrace-config/CD_cdcicd-jenkins/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdcicd-jenkins/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_cdcicd-jenkins/management-zone/default.json b/BMW-Dynatrace-config/CD_cdcicd-jenkins/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdcicd-jenkins/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdcicd-jenkins/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_cdcicd-jenkins/management-zone/management-zone.yaml new file mode 100644 index 00000000..573792cf --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdcicd-jenkins/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDcdcicd-jenkins: default.json + +CDcdcicd-jenkins: +- name: CD_cdcicd-jenkins +- tag: cdcicd-jenkins diff --git a/BMW-Dynatrace-config/CD_cdcicd-jenkins/notification/README.md b/BMW-Dynatrace-config/CD_cdcicd-jenkins/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdcicd-jenkins/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdcicd-jenkins/notification/email.json b/BMW-Dynatrace-config/CD_cdcicd-jenkins/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdcicd-jenkins/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdcicd-jenkins/notification/msTeams.json b/BMW-Dynatrace-config/CD_cdcicd-jenkins/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdcicd-jenkins/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdcicd-jenkins/notification/notification.yaml b/BMW-Dynatrace-config/CD_cdcicd-jenkins/notification/notification.yaml new file mode 100644 index 00000000..a3defbbf --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdcicd-jenkins/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDcdcicd-jenkins-PROD: msTeams.json +- CDcdcicd-jenkins-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcdcicd-jenkins-PROD: +- name: CD_cdcicd-jenkins PROD +- alertingProfile: CD_cdcicd-jenkins/alerting-profile/CDcdcicd-jenkins-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcdcicd-jenkins-PROD.EMEA-Prod: +- name: CD_cdcicd-jenkins PROD +- alertingProfile: CD_cdcicd-jenkins/alerting-profile/CDcdcicd-jenkins-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDcdcicd-jenkins-PROD.NA-Prod: +- name: CD_cdcicd-jenkins PROD +- alertingProfile: CD_cdcicd-jenkins/alerting-profile/CDcdcicd-jenkins-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDcdcicd-jenkins-PROD.CN-Prod: +- name: CD_cdcicd-jenkins PROD +- alertingProfile: CD_cdcicd-jenkins/alerting-profile/CDcdcicd-jenkins-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcdcicd-jenkins-INT: +- name: CD_cdcicd-jenkins INT +- alertingProfile: CD_cdcicd-jenkins/alerting-profile/CDcdcicd-jenkins-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcdcicd-jenkins-INT.EMEA-PreProd: +- name: CD_cdcicd-jenkins INT +- alertingProfile: CD_cdcicd-jenkins/alerting-profile/CDcdcicd-jenkins-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDcdcicd-jenkins-INT.NA-PreProd: +- name: CD_cdcicd-jenkins INT +- alertingProfile: CD_cdcicd-jenkins/alerting-profile/CDcdcicd-jenkins-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDcdcicd-jenkins-INT.CN-PreProd: +- name: CD_cdcicd-jenkins INT +- alertingProfile: CD_cdcicd-jenkins/alerting-profile/CDcdcicd-jenkins-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdcicd-jenkins/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_cdcicd-jenkins/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdcicd-jenkins/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdcicd-jenkins/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_cdcicd-jenkins/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdcicd-jenkins/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdcicd-jenkins/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_cdcicd-jenkins/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..ffc76c10 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdcicd-jenkins/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- cdcicd-jenkins: default.json + +cdcicd-jenkins: +- name: CD_cdcicd-jenkins - +- mzName: CD_cdcicd-jenkins/management-zone/CDcdcicd-jenkins.name +- mzId: CD_cdcicd-jenkins/management-zone/CDcdcicd-jenkins.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_chargenow-enabler-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_chargenow-enabler-service/alerting-profile/alerting-profile.yaml index a452142f..bbd226d3 100644 --- a/BMW-Dynatrace-config/CD_chargenow-enabler-service/alerting-profile/alerting-profile.yaml +++ b/BMW-Dynatrace-config/CD_chargenow-enabler-service/alerting-profile/alerting-profile.yaml @@ -1,6 +1,88 @@ -CDchargenow-enabler-service: -- name: CD_chargenow-enabler-service/management-zone/CDchargenow-enabler-service.name +config: +- CDchargenow-enabler-service-PROD: default.json +- CDchargenow-enabler-service-E2E: default.json +- CDchargenow-enabler-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDchargenow-enabler-service-PROD: +- name: CD_chargenow-enabler-service PROD - tag: chargenow-enabler-service - mzId: CD_chargenow-enabler-service/management-zone/CDchargenow-enabler-service.id -config: -- CDchargenow-enabler-service: chargenow-enabler-service.json +- env: PROD +- skipDeployment: "true" +#Configuration +CDchargenow-enabler-service-PROD.EMEA-Prod: +- name: CD_chargenow-enabler-service PROD +- tag: chargenow-enabler-service +- mzId: CD_chargenow-enabler-service/management-zone/CDchargenow-enabler-service.id +- env: PROD +- skipDeployment: "false" +CDchargenow-enabler-service-PROD.NA-Prod: +- name: CD_chargenow-enabler-service PROD +- tag: chargenow-enabler-service +- mzId: CD_chargenow-enabler-service/management-zone/CDchargenow-enabler-service.id +- env: PROD +- skipDeployment: "false" +CDchargenow-enabler-service-PROD.CN-Prod: +- name: CD_chargenow-enabler-service PROD +- tag: chargenow-enabler-service +- mzId: CD_chargenow-enabler-service/management-zone/CDchargenow-enabler-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDchargenow-enabler-service-E2E: +- name: CD_chargenow-enabler-service E2E +- tag: chargenow-enabler-service +- mzId: CD_chargenow-enabler-service/management-zone/CDchargenow-enabler-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDchargenow-enabler-service-E2E.EMEA-Prod: +- name: CD_chargenow-enabler-service E2E +- tag: chargenow-enabler-service +- mzId: CD_chargenow-enabler-service/management-zone/CDchargenow-enabler-service.id +- env: E2E +- skipDeployment: "false" +CDchargenow-enabler-service-E2E.NA-Prod: +- name: CD_chargenow-enabler-service E2E +- tag: chargenow-enabler-service +- mzId: CD_chargenow-enabler-service/management-zone/CDchargenow-enabler-service.id +- env: E2E +- skipDeployment: "false" +CDchargenow-enabler-service-E2E.CN-Prod: +- name: CD_chargenow-enabler-service E2E +- tag: chargenow-enabler-service +- mzId: CD_chargenow-enabler-service/management-zone/CDchargenow-enabler-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDchargenow-enabler-service-INT: +- name: CD_chargenow-enabler-service INT +- tag: chargenow-enabler-service +- mzId: CD_chargenow-enabler-service/management-zone/CDchargenow-enabler-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDchargenow-enabler-service-INT.EMEA-PreProd: +- name: CD_chargenow-enabler-service INT +- tag: chargenow-enabler-service +- mzId: CD_chargenow-enabler-service/management-zone/CDchargenow-enabler-service.id +- env: INT +- skipDeployment: "false" +CDchargenow-enabler-service-INT.NA-PreProd: +- name: CD_chargenow-enabler-service INT +- tag: chargenow-enabler-service +- mzId: CD_chargenow-enabler-service/management-zone/CDchargenow-enabler-service.id +- env: INT +- skipDeployment: "false" +CDchargenow-enabler-service-INT.CN-PreProd: +- name: CD_chargenow-enabler-service INT +- tag: chargenow-enabler-service +- mzId: CD_chargenow-enabler-service/management-zone/CDchargenow-enabler-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_chargenow-enabler-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_chargenow-enabler-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_chargenow-enabler-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_chargenow-enabler-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_chargenow-enabler-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_chargenow-enabler-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_chargenow-enabler-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_chargenow-enabler-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_chargenow-enabler-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_chargenow-enabler-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_chargenow-enabler-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_chargenow-enabler-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_chargenow-enabler-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_chargenow-enabler-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_chargenow-enabler-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_chargenow-enabler-service/dashboard/README.md b/BMW-Dynatrace-config/CD_chargenow-enabler-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_chargenow-enabler-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_chargenow-enabler-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_chargenow-enabler-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..69822974 --- /dev/null +++ b/BMW-Dynatrace-config/CD_chargenow-enabler-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDchargenow-enabler-service-PROD-E2E: defaultPRODE2E.json +- CDchargenow-enabler-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDchargenow-enabler-service-PROD-E2E: +- name: CD_chargenow-enabler-service PROD +- mzName: CD_chargenow-enabler-service/management-zone/CDchargenow-enabler-service.name +- mzId: CD_chargenow-enabler-service/management-zone/CDchargenow-enabler-service.id +- skipDeployment: "true" +#Configuration +CDchargenow-enabler-service-PROD-E2E.EMEA-Prod: +- name: CD_chargenow-enabler-service PROD +- mzName: CD_chargenow-enabler-service/management-zone/CDchargenow-enabler-service.name +- mzId: CD_chargenow-enabler-service/management-zone/CDchargenow-enabler-service.id +- tag: chargenow-enabler-service +- skipDeployment: "false" +CDchargenow-enabler-service-PROD-E2E.NA-Prod: +- name: CD_chargenow-enabler-service PROD +- mzName: CD_chargenow-enabler-service/management-zone/CDchargenow-enabler-service.name +- mzId: CD_chargenow-enabler-service/management-zone/CDchargenow-enabler-service.id +- tag: chargenow-enabler-service +- skipDeployment: "false" +CDchargenow-enabler-service-PROD-E2E.CN-Prod: +- name: CD_chargenow-enabler-service PROD +- mzName: CD_chargenow-enabler-service/management-zone/CDchargenow-enabler-service.name +- mzId: CD_chargenow-enabler-service/management-zone/CDchargenow-enabler-service.id +- tag: chargenow-enabler-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDchargenow-enabler-service-INT-TEST: +- name: CD_chargenow-enabler-service INT-TEST +- mzName: CD_chargenow-enabler-service/management-zone/CDchargenow-enabler-service.name +- mzId: CD_chargenow-enabler-service/management-zone/CDchargenow-enabler-service.id +- tag: chargenow-enabler-service +- skipDeployment: "true" +#Configuration +CDchargenow-enabler-service-INT-TEST.EMEA-PreProd: +- name: CD_chargenow-enabler-service INT-TEST +- mzName: CD_chargenow-enabler-service/management-zone/CDchargenow-enabler-service.name +- mzId: CD_chargenow-enabler-service/management-zone/CDchargenow-enabler-service.id +- tag: chargenow-enabler-service +- skipDeployment: "false" +CDchargenow-enabler-service-INT-TEST.NA-PreProd: +- name: CD_chargenow-enabler-service INT-TEST +- mzName: CD_chargenow-enabler-service/management-zone/CDchargenow-enabler-service.name +- mzId: CD_chargenow-enabler-service/management-zone/CDchargenow-enabler-service.id +- env: INT +- skipDeployment: "false" +CDchargenow-enabler-service-INT-TEST.CN-PreProd: +- name: CD_chargenow-enabler-service INT-TEST +- mzName: CD_chargenow-enabler-service/management-zone/CDchargenow-enabler-service.name +- mzId: CD_chargenow-enabler-service/management-zone/CDchargenow-enabler-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_chargenow-enabler-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_chargenow-enabler-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_chargenow-enabler-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_chargenow-enabler-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_chargenow-enabler-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_chargenow-enabler-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_chargenow-enabler-service/management-zone/README.md b/BMW-Dynatrace-config/CD_chargenow-enabler-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_chargenow-enabler-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_chargenow-enabler-service/management-zone/default.json b/BMW-Dynatrace-config/CD_chargenow-enabler-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_chargenow-enabler-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_chargenow-enabler-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_chargenow-enabler-service/management-zone/management-zone.yaml index b7c96eb9..b02e54c3 100644 --- a/BMW-Dynatrace-config/CD_chargenow-enabler-service/management-zone/management-zone.yaml +++ b/BMW-Dynatrace-config/CD_chargenow-enabler-service/management-zone/management-zone.yaml @@ -1,20 +1,6 @@ -CDchargenow-enabler-service.CN-PreProd: -- name: CD_chargenow-enabler-service -- tag: chargenow-enabler-service -CDchargenow-enabler-service.CN-Prod: -- name: CD_chargenow-enabler-service -- tag: chargenow-enabler-service -CDchargenow-enabler-service.EMEA-PreProd: -- name: CD_chargenow-enabler-service -- tag: chargenow-enabler-service -CDchargenow-enabler-service.EMEA-Prod: -- name: CD_chargenow-enabler-service -- tag: chargenow-enabler-service -CDchargenow-enabler-service.NA-PreProd: -- name: CD_chargenow-enabler-service -- tag: chargenow-enabler-service -CDchargenow-enabler-service.NA-Prod: -- name: CD_chargenow-enabler-service -- tag: chargenow-enabler-service config: -- CDchargenow-enabler-service: CDchargenow-enabler-service.json +- CDchargenow-enabler-service: default.json + +CDchargenow-enabler-service: +- name: CD_chargenow-enabler-service +- tag: chargenow-enabler-service diff --git a/BMW-Dynatrace-config/CD_chargenow-enabler-service/notification/README.md b/BMW-Dynatrace-config/CD_chargenow-enabler-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_chargenow-enabler-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_chargenow-enabler-service/notification/email.json b/BMW-Dynatrace-config/CD_chargenow-enabler-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_chargenow-enabler-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_chargenow-enabler-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_chargenow-enabler-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_chargenow-enabler-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_chargenow-enabler-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_chargenow-enabler-service/notification/notification.yaml new file mode 100644 index 00000000..fac2b2cd --- /dev/null +++ b/BMW-Dynatrace-config/CD_chargenow-enabler-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDchargenow-enabler-service-PROD: msTeams.json +- CDchargenow-enabler-service-E2E: msTeams.json +- CDchargenow-enabler-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDchargenow-enabler-service-PROD: +- name: CD_chargenow-enabler-service PROD +- alertingProfile: CD_chargenow-enabler-service/alerting-profile/CDchargenow-enabler-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDchargenow-enabler-service-PROD.EMEA-Prod: +- name: CD_chargenow-enabler-service PROD +- alertingProfile: CD_chargenow-enabler-service/alerting-profile/CDchargenow-enabler-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDchargenow-enabler-service-PROD.NA-Prod: +- name: CD_chargenow-enabler-service PROD +- alertingProfile: CD_chargenow-enabler-service/alerting-profile/CDchargenow-enabler-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDchargenow-enabler-service-PROD.CN-Prod: +- name: CD_chargenow-enabler-service PROD +- alertingProfile: CD_chargenow-enabler-service/alerting-profile/CDchargenow-enabler-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDchargenow-enabler-service-E2E: +- name: CD_chargenow-enabler-service E2E +- alertingProfile: CD_chargenow-enabler-service/alerting-profile/CDchargenow-enabler-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDchargenow-enabler-service-E2E.EMEA-Prod: +- name: CD_chargenow-enabler-service E2E +- alertingProfile: CD_chargenow-enabler-service/alerting-profile/CDchargenow-enabler-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDchargenow-enabler-service-E2E.NA-Prod: +- name: CD_chargenow-enabler-service E2E +- alertingProfile: CD_chargenow-enabler-service/alerting-profile/CDchargenow-enabler-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDchargenow-enabler-service-E2E.CN-Prod: +- name: CD_chargenow-enabler-service E2E +- alertingProfile: CD_chargenow-enabler-service/alerting-profile/CDchargenow-enabler-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDchargenow-enabler-service-INT: +- name: CD_chargenow-enabler-service INT +- alertingProfile: CD_chargenow-enabler-service/alerting-profile/CDchargenow-enabler-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDchargenow-enabler-service-INT.EMEA-PreProd: +- name: CD_chargenow-enabler-service INT +- alertingProfile: CD_chargenow-enabler-service/alerting-profile/CDchargenow-enabler-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDchargenow-enabler-service-INT.NA-PreProd: +- name: CD_chargenow-enabler-service INT +- alertingProfile: CD_chargenow-enabler-service/alerting-profile/CDchargenow-enabler-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDchargenow-enabler-service-INT.CN-PreProd: +- name: CD_chargenow-enabler-service INT +- alertingProfile: CD_chargenow-enabler-service/alerting-profile/CDchargenow-enabler-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_chargenow-enabler-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_chargenow-enabler-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_chargenow-enabler-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_chargenow-enabler-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_chargenow-enabler-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_chargenow-enabler-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_chargenow-enabler-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_chargenow-enabler-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..9ff2e2dc --- /dev/null +++ b/BMW-Dynatrace-config/CD_chargenow-enabler-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- chargenow-enabler-service: default.json + +chargenow-enabler-service: +- name: CD_chargenow-enabler-service - +- mzName: CD_chargenow-enabler-service/management-zone/CDchargenow-enabler-service.name +- mzId: CD_chargenow-enabler-service/management-zone/CDchargenow-enabler-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy-composite/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..d77648ce --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDcharging-data-privacy-composite-PROD: default.json +- CDcharging-data-privacy-composite-E2E: default.json +- CDcharging-data-privacy-composite-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-data-privacy-composite-PROD: +- name: CD_charging-data-privacy-composite PROD +- tag: charging-data-privacy-composite +- mzId: CD_charging-data-privacy-composite/management-zone/CDcharging-data-privacy-composite.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDcharging-data-privacy-composite-PROD.EMEA-Prod: +- name: CD_charging-data-privacy-composite PROD +- tag: charging-data-privacy-composite +- mzId: CD_charging-data-privacy-composite/management-zone/CDcharging-data-privacy-composite.id +- env: PROD +- skipDeployment: "false" +CDcharging-data-privacy-composite-PROD.NA-Prod: +- name: CD_charging-data-privacy-composite PROD +- tag: charging-data-privacy-composite +- mzId: CD_charging-data-privacy-composite/management-zone/CDcharging-data-privacy-composite.id +- env: PROD +- skipDeployment: "false" +CDcharging-data-privacy-composite-PROD.CN-Prod: +- name: CD_charging-data-privacy-composite PROD +- tag: charging-data-privacy-composite +- mzId: CD_charging-data-privacy-composite/management-zone/CDcharging-data-privacy-composite.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-data-privacy-composite-E2E: +- name: CD_charging-data-privacy-composite E2E +- tag: charging-data-privacy-composite +- mzId: CD_charging-data-privacy-composite/management-zone/CDcharging-data-privacy-composite.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDcharging-data-privacy-composite-E2E.EMEA-Prod: +- name: CD_charging-data-privacy-composite E2E +- tag: charging-data-privacy-composite +- mzId: CD_charging-data-privacy-composite/management-zone/CDcharging-data-privacy-composite.id +- env: E2E +- skipDeployment: "false" +CDcharging-data-privacy-composite-E2E.NA-Prod: +- name: CD_charging-data-privacy-composite E2E +- tag: charging-data-privacy-composite +- mzId: CD_charging-data-privacy-composite/management-zone/CDcharging-data-privacy-composite.id +- env: E2E +- skipDeployment: "false" +CDcharging-data-privacy-composite-E2E.CN-Prod: +- name: CD_charging-data-privacy-composite E2E +- tag: charging-data-privacy-composite +- mzId: CD_charging-data-privacy-composite/management-zone/CDcharging-data-privacy-composite.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-data-privacy-composite-INT: +- name: CD_charging-data-privacy-composite INT +- tag: charging-data-privacy-composite +- mzId: CD_charging-data-privacy-composite/management-zone/CDcharging-data-privacy-composite.id +- env: INT +- skipDeployment: "true" +#Configuration +CDcharging-data-privacy-composite-INT.EMEA-PreProd: +- name: CD_charging-data-privacy-composite INT +- tag: charging-data-privacy-composite +- mzId: CD_charging-data-privacy-composite/management-zone/CDcharging-data-privacy-composite.id +- env: INT +- skipDeployment: "false" +CDcharging-data-privacy-composite-INT.NA-PreProd: +- name: CD_charging-data-privacy-composite INT +- tag: charging-data-privacy-composite +- mzId: CD_charging-data-privacy-composite/management-zone/CDcharging-data-privacy-composite.id +- env: INT +- skipDeployment: "false" +CDcharging-data-privacy-composite-INT.CN-PreProd: +- name: CD_charging-data-privacy-composite INT +- tag: charging-data-privacy-composite +- mzId: CD_charging-data-privacy-composite/management-zone/CDcharging-data-privacy-composite.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy-composite/alerting-profile/default.json b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy-composite/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy-composite/custom-service-java/README.md b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy-composite/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy-composite/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy-composite/dashboard/README.md b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy-composite/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/dashboard/dashboard.yaml new file mode 100644 index 00000000..08037b47 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDcharging-data-privacy-composite-PROD-E2E: defaultPRODE2E.json +- CDcharging-data-privacy-composite-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDcharging-data-privacy-composite-PROD-E2E: +- name: CD_charging-data-privacy-composite PROD +- mzName: CD_charging-data-privacy-composite/management-zone/CDcharging-data-privacy-composite.name +- mzId: CD_charging-data-privacy-composite/management-zone/CDcharging-data-privacy-composite.id +- skipDeployment: "true" +#Configuration +CDcharging-data-privacy-composite-PROD-E2E.EMEA-Prod: +- name: CD_charging-data-privacy-composite PROD +- mzName: CD_charging-data-privacy-composite/management-zone/CDcharging-data-privacy-composite.name +- mzId: CD_charging-data-privacy-composite/management-zone/CDcharging-data-privacy-composite.id +- tag: charging-data-privacy-composite +- skipDeployment: "false" +CDcharging-data-privacy-composite-PROD-E2E.NA-Prod: +- name: CD_charging-data-privacy-composite PROD +- mzName: CD_charging-data-privacy-composite/management-zone/CDcharging-data-privacy-composite.name +- mzId: CD_charging-data-privacy-composite/management-zone/CDcharging-data-privacy-composite.id +- tag: charging-data-privacy-composite +- skipDeployment: "false" +CDcharging-data-privacy-composite-PROD-E2E.CN-Prod: +- name: CD_charging-data-privacy-composite PROD +- mzName: CD_charging-data-privacy-composite/management-zone/CDcharging-data-privacy-composite.name +- mzId: CD_charging-data-privacy-composite/management-zone/CDcharging-data-privacy-composite.id +- tag: charging-data-privacy-composite +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDcharging-data-privacy-composite-INT-TEST: +- name: CD_charging-data-privacy-composite INT-TEST +- mzName: CD_charging-data-privacy-composite/management-zone/CDcharging-data-privacy-composite.name +- mzId: CD_charging-data-privacy-composite/management-zone/CDcharging-data-privacy-composite.id +- tag: charging-data-privacy-composite +- skipDeployment: "true" +#Configuration +CDcharging-data-privacy-composite-INT-TEST.EMEA-PreProd: +- name: CD_charging-data-privacy-composite INT-TEST +- mzName: CD_charging-data-privacy-composite/management-zone/CDcharging-data-privacy-composite.name +- mzId: CD_charging-data-privacy-composite/management-zone/CDcharging-data-privacy-composite.id +- tag: charging-data-privacy-composite +- skipDeployment: "false" +CDcharging-data-privacy-composite-INT-TEST.NA-PreProd: +- name: CD_charging-data-privacy-composite INT-TEST +- mzName: CD_charging-data-privacy-composite/management-zone/CDcharging-data-privacy-composite.name +- mzId: CD_charging-data-privacy-composite/management-zone/CDcharging-data-privacy-composite.id +- env: INT +- skipDeployment: "false" +CDcharging-data-privacy-composite-INT-TEST.CN-PreProd: +- name: CD_charging-data-privacy-composite INT-TEST +- mzName: CD_charging-data-privacy-composite/management-zone/CDcharging-data-privacy-composite.name +- mzId: CD_charging-data-privacy-composite/management-zone/CDcharging-data-privacy-composite.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy-composite/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy-composite/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy-composite/management-zone/README.md b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy-composite/management-zone/default.json b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy-composite/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/management-zone/management-zone.yaml new file mode 100644 index 00000000..e6b523e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDcharging-data-privacy-composite: default.json + +CDcharging-data-privacy-composite: +- name: CD_charging-data-privacy-composite +- tag: charging-data-privacy-composite diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy-composite/notification/README.md b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy-composite/notification/email.json b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy-composite/notification/msTeams.json b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy-composite/notification/notification.yaml b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/notification/notification.yaml new file mode 100644 index 00000000..df31092e --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDcharging-data-privacy-composite-PROD: msTeams.json +- CDcharging-data-privacy-composite-E2E: msTeams.json +- CDcharging-data-privacy-composite-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-data-privacy-composite-PROD: +- name: CD_charging-data-privacy-composite PROD +- alertingProfile: CD_charging-data-privacy-composite/alerting-profile/CDcharging-data-privacy-composite-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcharging-data-privacy-composite-PROD.EMEA-Prod: +- name: CD_charging-data-privacy-composite PROD +- alertingProfile: CD_charging-data-privacy-composite/alerting-profile/CDcharging-data-privacy-composite-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-data-privacy-composite-PROD.NA-Prod: +- name: CD_charging-data-privacy-composite PROD +- alertingProfile: CD_charging-data-privacy-composite/alerting-profile/CDcharging-data-privacy-composite-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-data-privacy-composite-PROD.CN-Prod: +- name: CD_charging-data-privacy-composite PROD +- alertingProfile: CD_charging-data-privacy-composite/alerting-profile/CDcharging-data-privacy-composite-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-data-privacy-composite-E2E: +- name: CD_charging-data-privacy-composite E2E +- alertingProfile: CD_charging-data-privacy-composite/alerting-profile/CDcharging-data-privacy-composite-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcharging-data-privacy-composite-E2E.EMEA-Prod: +- name: CD_charging-data-privacy-composite E2E +- alertingProfile: CD_charging-data-privacy-composite/alerting-profile/CDcharging-data-privacy-composite-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-data-privacy-composite-E2E.NA-Prod: +- name: CD_charging-data-privacy-composite E2E +- alertingProfile: CD_charging-data-privacy-composite/alerting-profile/CDcharging-data-privacy-composite-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-data-privacy-composite-E2E.CN-Prod: +- name: CD_charging-data-privacy-composite E2E +- alertingProfile: CD_charging-data-privacy-composite/alerting-profile/CDcharging-data-privacy-composite-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-data-privacy-composite-INT: +- name: CD_charging-data-privacy-composite INT +- alertingProfile: CD_charging-data-privacy-composite/alerting-profile/CDcharging-data-privacy-composite-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcharging-data-privacy-composite-INT.EMEA-PreProd: +- name: CD_charging-data-privacy-composite INT +- alertingProfile: CD_charging-data-privacy-composite/alerting-profile/CDcharging-data-privacy-composite-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-data-privacy-composite-INT.NA-PreProd: +- name: CD_charging-data-privacy-composite INT +- alertingProfile: CD_charging-data-privacy-composite/alerting-profile/CDcharging-data-privacy-composite-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-data-privacy-composite-INT.CN-PreProd: +- name: CD_charging-data-privacy-composite INT +- alertingProfile: CD_charging-data-privacy-composite/alerting-profile/CDcharging-data-privacy-composite-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy-composite/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy-composite/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy-composite/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..19861c16 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- charging-data-privacy-composite: default.json + +charging-data-privacy-composite: +- name: CD_charging-data-privacy-composite - +- mzName: CD_charging-data-privacy-composite/management-zone/CDcharging-data-privacy-composite.name +- mzId: CD_charging-data-privacy-composite/management-zone/CDcharging-data-privacy-composite.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_charging-data-privacy/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..a2fc31fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDcharging-data-privacy-PROD: default.json +- CDcharging-data-privacy-E2E: default.json +- CDcharging-data-privacy-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-data-privacy-PROD: +- name: CD_charging-data-privacy PROD +- tag: charging-data-privacy +- mzId: CD_charging-data-privacy/management-zone/CDcharging-data-privacy.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDcharging-data-privacy-PROD.EMEA-Prod: +- name: CD_charging-data-privacy PROD +- tag: charging-data-privacy +- mzId: CD_charging-data-privacy/management-zone/CDcharging-data-privacy.id +- env: PROD +- skipDeployment: "false" +CDcharging-data-privacy-PROD.NA-Prod: +- name: CD_charging-data-privacy PROD +- tag: charging-data-privacy +- mzId: CD_charging-data-privacy/management-zone/CDcharging-data-privacy.id +- env: PROD +- skipDeployment: "false" +CDcharging-data-privacy-PROD.CN-Prod: +- name: CD_charging-data-privacy PROD +- tag: charging-data-privacy +- mzId: CD_charging-data-privacy/management-zone/CDcharging-data-privacy.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-data-privacy-E2E: +- name: CD_charging-data-privacy E2E +- tag: charging-data-privacy +- mzId: CD_charging-data-privacy/management-zone/CDcharging-data-privacy.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDcharging-data-privacy-E2E.EMEA-Prod: +- name: CD_charging-data-privacy E2E +- tag: charging-data-privacy +- mzId: CD_charging-data-privacy/management-zone/CDcharging-data-privacy.id +- env: E2E +- skipDeployment: "false" +CDcharging-data-privacy-E2E.NA-Prod: +- name: CD_charging-data-privacy E2E +- tag: charging-data-privacy +- mzId: CD_charging-data-privacy/management-zone/CDcharging-data-privacy.id +- env: E2E +- skipDeployment: "false" +CDcharging-data-privacy-E2E.CN-Prod: +- name: CD_charging-data-privacy E2E +- tag: charging-data-privacy +- mzId: CD_charging-data-privacy/management-zone/CDcharging-data-privacy.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-data-privacy-INT: +- name: CD_charging-data-privacy INT +- tag: charging-data-privacy +- mzId: CD_charging-data-privacy/management-zone/CDcharging-data-privacy.id +- env: INT +- skipDeployment: "true" +#Configuration +CDcharging-data-privacy-INT.EMEA-PreProd: +- name: CD_charging-data-privacy INT +- tag: charging-data-privacy +- mzId: CD_charging-data-privacy/management-zone/CDcharging-data-privacy.id +- env: INT +- skipDeployment: "false" +CDcharging-data-privacy-INT.NA-PreProd: +- name: CD_charging-data-privacy INT +- tag: charging-data-privacy +- mzId: CD_charging-data-privacy/management-zone/CDcharging-data-privacy.id +- env: INT +- skipDeployment: "false" +CDcharging-data-privacy-INT.CN-PreProd: +- name: CD_charging-data-privacy INT +- tag: charging-data-privacy +- mzId: CD_charging-data-privacy/management-zone/CDcharging-data-privacy.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy/alerting-profile/default.json b/BMW-Dynatrace-config/CD_charging-data-privacy/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_charging-data-privacy/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy/custom-service-java/README.md b/BMW-Dynatrace-config/CD_charging-data-privacy/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_charging-data-privacy/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_charging-data-privacy/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy/dashboard/README.md b/BMW-Dynatrace-config/CD_charging-data-privacy/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_charging-data-privacy/dashboard/dashboard.yaml new file mode 100644 index 00000000..fc9dbd9f --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDcharging-data-privacy-PROD-E2E: defaultPRODE2E.json +- CDcharging-data-privacy-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDcharging-data-privacy-PROD-E2E: +- name: CD_charging-data-privacy PROD +- mzName: CD_charging-data-privacy/management-zone/CDcharging-data-privacy.name +- mzId: CD_charging-data-privacy/management-zone/CDcharging-data-privacy.id +- skipDeployment: "true" +#Configuration +CDcharging-data-privacy-PROD-E2E.EMEA-Prod: +- name: CD_charging-data-privacy PROD +- mzName: CD_charging-data-privacy/management-zone/CDcharging-data-privacy.name +- mzId: CD_charging-data-privacy/management-zone/CDcharging-data-privacy.id +- tag: charging-data-privacy +- skipDeployment: "false" +CDcharging-data-privacy-PROD-E2E.NA-Prod: +- name: CD_charging-data-privacy PROD +- mzName: CD_charging-data-privacy/management-zone/CDcharging-data-privacy.name +- mzId: CD_charging-data-privacy/management-zone/CDcharging-data-privacy.id +- tag: charging-data-privacy +- skipDeployment: "false" +CDcharging-data-privacy-PROD-E2E.CN-Prod: +- name: CD_charging-data-privacy PROD +- mzName: CD_charging-data-privacy/management-zone/CDcharging-data-privacy.name +- mzId: CD_charging-data-privacy/management-zone/CDcharging-data-privacy.id +- tag: charging-data-privacy +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDcharging-data-privacy-INT-TEST: +- name: CD_charging-data-privacy INT-TEST +- mzName: CD_charging-data-privacy/management-zone/CDcharging-data-privacy.name +- mzId: CD_charging-data-privacy/management-zone/CDcharging-data-privacy.id +- tag: charging-data-privacy +- skipDeployment: "true" +#Configuration +CDcharging-data-privacy-INT-TEST.EMEA-PreProd: +- name: CD_charging-data-privacy INT-TEST +- mzName: CD_charging-data-privacy/management-zone/CDcharging-data-privacy.name +- mzId: CD_charging-data-privacy/management-zone/CDcharging-data-privacy.id +- tag: charging-data-privacy +- skipDeployment: "false" +CDcharging-data-privacy-INT-TEST.NA-PreProd: +- name: CD_charging-data-privacy INT-TEST +- mzName: CD_charging-data-privacy/management-zone/CDcharging-data-privacy.name +- mzId: CD_charging-data-privacy/management-zone/CDcharging-data-privacy.id +- env: INT +- skipDeployment: "false" +CDcharging-data-privacy-INT-TEST.CN-PreProd: +- name: CD_charging-data-privacy INT-TEST +- mzName: CD_charging-data-privacy/management-zone/CDcharging-data-privacy.name +- mzId: CD_charging-data-privacy/management-zone/CDcharging-data-privacy.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_charging-data-privacy/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_charging-data-privacy/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy/management-zone/README.md b/BMW-Dynatrace-config/CD_charging-data-privacy/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy/management-zone/default.json b/BMW-Dynatrace-config/CD_charging-data-privacy/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_charging-data-privacy/management-zone/management-zone.yaml new file mode 100644 index 00000000..d346ed34 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDcharging-data-privacy: default.json + +CDcharging-data-privacy: +- name: CD_charging-data-privacy +- tag: charging-data-privacy diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy/notification/README.md b/BMW-Dynatrace-config/CD_charging-data-privacy/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy/notification/email.json b/BMW-Dynatrace-config/CD_charging-data-privacy/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy/notification/msTeams.json b/BMW-Dynatrace-config/CD_charging-data-privacy/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy/notification/notification.yaml b/BMW-Dynatrace-config/CD_charging-data-privacy/notification/notification.yaml new file mode 100644 index 00000000..e817195a --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDcharging-data-privacy-PROD: msTeams.json +- CDcharging-data-privacy-E2E: msTeams.json +- CDcharging-data-privacy-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-data-privacy-PROD: +- name: CD_charging-data-privacy PROD +- alertingProfile: CD_charging-data-privacy/alerting-profile/CDcharging-data-privacy-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcharging-data-privacy-PROD.EMEA-Prod: +- name: CD_charging-data-privacy PROD +- alertingProfile: CD_charging-data-privacy/alerting-profile/CDcharging-data-privacy-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-data-privacy-PROD.NA-Prod: +- name: CD_charging-data-privacy PROD +- alertingProfile: CD_charging-data-privacy/alerting-profile/CDcharging-data-privacy-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-data-privacy-PROD.CN-Prod: +- name: CD_charging-data-privacy PROD +- alertingProfile: CD_charging-data-privacy/alerting-profile/CDcharging-data-privacy-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-data-privacy-E2E: +- name: CD_charging-data-privacy E2E +- alertingProfile: CD_charging-data-privacy/alerting-profile/CDcharging-data-privacy-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcharging-data-privacy-E2E.EMEA-Prod: +- name: CD_charging-data-privacy E2E +- alertingProfile: CD_charging-data-privacy/alerting-profile/CDcharging-data-privacy-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-data-privacy-E2E.NA-Prod: +- name: CD_charging-data-privacy E2E +- alertingProfile: CD_charging-data-privacy/alerting-profile/CDcharging-data-privacy-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-data-privacy-E2E.CN-Prod: +- name: CD_charging-data-privacy E2E +- alertingProfile: CD_charging-data-privacy/alerting-profile/CDcharging-data-privacy-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-data-privacy-INT: +- name: CD_charging-data-privacy INT +- alertingProfile: CD_charging-data-privacy/alerting-profile/CDcharging-data-privacy-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcharging-data-privacy-INT.EMEA-PreProd: +- name: CD_charging-data-privacy INT +- alertingProfile: CD_charging-data-privacy/alerting-profile/CDcharging-data-privacy-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-data-privacy-INT.NA-PreProd: +- name: CD_charging-data-privacy INT +- alertingProfile: CD_charging-data-privacy/alerting-profile/CDcharging-data-privacy-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-data-privacy-INT.CN-PreProd: +- name: CD_charging-data-privacy INT +- alertingProfile: CD_charging-data-privacy/alerting-profile/CDcharging-data-privacy-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_charging-data-privacy/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_charging-data-privacy/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_charging-data-privacy/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..ea50b1bc --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- charging-data-privacy: default.json + +charging-data-privacy: +- name: CD_charging-data-privacy - +- mzName: CD_charging-data-privacy/management-zone/CDcharging-data-privacy.name +- mzId: CD_charging-data-privacy/management-zone/CDcharging-data-privacy.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-push-notification-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..d73a472c --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDcharging-events-push-notification-service-PROD: default.json +- CDcharging-events-push-notification-service-E2E: default.json +- CDcharging-events-push-notification-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-events-push-notification-service-PROD: +- name: CD_charging-events-push-notification-service PROD +- tag: charging-events-push-notification-service +- mzId: CD_charging-events-push-notification-service/management-zone/CDcharging-events-push-notification-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDcharging-events-push-notification-service-PROD.EMEA-Prod: +- name: CD_charging-events-push-notification-service PROD +- tag: charging-events-push-notification-service +- mzId: CD_charging-events-push-notification-service/management-zone/CDcharging-events-push-notification-service.id +- env: PROD +- skipDeployment: "false" +CDcharging-events-push-notification-service-PROD.NA-Prod: +- name: CD_charging-events-push-notification-service PROD +- tag: charging-events-push-notification-service +- mzId: CD_charging-events-push-notification-service/management-zone/CDcharging-events-push-notification-service.id +- env: PROD +- skipDeployment: "false" +CDcharging-events-push-notification-service-PROD.CN-Prod: +- name: CD_charging-events-push-notification-service PROD +- tag: charging-events-push-notification-service +- mzId: CD_charging-events-push-notification-service/management-zone/CDcharging-events-push-notification-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-events-push-notification-service-E2E: +- name: CD_charging-events-push-notification-service E2E +- tag: charging-events-push-notification-service +- mzId: CD_charging-events-push-notification-service/management-zone/CDcharging-events-push-notification-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDcharging-events-push-notification-service-E2E.EMEA-Prod: +- name: CD_charging-events-push-notification-service E2E +- tag: charging-events-push-notification-service +- mzId: CD_charging-events-push-notification-service/management-zone/CDcharging-events-push-notification-service.id +- env: E2E +- skipDeployment: "false" +CDcharging-events-push-notification-service-E2E.NA-Prod: +- name: CD_charging-events-push-notification-service E2E +- tag: charging-events-push-notification-service +- mzId: CD_charging-events-push-notification-service/management-zone/CDcharging-events-push-notification-service.id +- env: E2E +- skipDeployment: "false" +CDcharging-events-push-notification-service-E2E.CN-Prod: +- name: CD_charging-events-push-notification-service E2E +- tag: charging-events-push-notification-service +- mzId: CD_charging-events-push-notification-service/management-zone/CDcharging-events-push-notification-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-events-push-notification-service-INT: +- name: CD_charging-events-push-notification-service INT +- tag: charging-events-push-notification-service +- mzId: CD_charging-events-push-notification-service/management-zone/CDcharging-events-push-notification-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDcharging-events-push-notification-service-INT.EMEA-PreProd: +- name: CD_charging-events-push-notification-service INT +- tag: charging-events-push-notification-service +- mzId: CD_charging-events-push-notification-service/management-zone/CDcharging-events-push-notification-service.id +- env: INT +- skipDeployment: "false" +CDcharging-events-push-notification-service-INT.NA-PreProd: +- name: CD_charging-events-push-notification-service INT +- tag: charging-events-push-notification-service +- mzId: CD_charging-events-push-notification-service/management-zone/CDcharging-events-push-notification-service.id +- env: INT +- skipDeployment: "false" +CDcharging-events-push-notification-service-INT.CN-PreProd: +- name: CD_charging-events-push-notification-service INT +- tag: charging-events-push-notification-service +- mzId: CD_charging-events-push-notification-service/management-zone/CDcharging-events-push-notification-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-push-notification-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-push-notification-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-push-notification-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-push-notification-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-push-notification-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-push-notification-service/dashboard/README.md b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-push-notification-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..7bddf522 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDcharging-events-push-notification-service-PROD-E2E: defaultPRODE2E.json +- CDcharging-events-push-notification-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDcharging-events-push-notification-service-PROD-E2E: +- name: CD_charging-events-push-notification-service PROD +- mzName: CD_charging-events-push-notification-service/management-zone/CDcharging-events-push-notification-service.name +- mzId: CD_charging-events-push-notification-service/management-zone/CDcharging-events-push-notification-service.id +- skipDeployment: "true" +#Configuration +CDcharging-events-push-notification-service-PROD-E2E.EMEA-Prod: +- name: CD_charging-events-push-notification-service PROD +- mzName: CD_charging-events-push-notification-service/management-zone/CDcharging-events-push-notification-service.name +- mzId: CD_charging-events-push-notification-service/management-zone/CDcharging-events-push-notification-service.id +- tag: charging-events-push-notification-service +- skipDeployment: "false" +CDcharging-events-push-notification-service-PROD-E2E.NA-Prod: +- name: CD_charging-events-push-notification-service PROD +- mzName: CD_charging-events-push-notification-service/management-zone/CDcharging-events-push-notification-service.name +- mzId: CD_charging-events-push-notification-service/management-zone/CDcharging-events-push-notification-service.id +- tag: charging-events-push-notification-service +- skipDeployment: "false" +CDcharging-events-push-notification-service-PROD-E2E.CN-Prod: +- name: CD_charging-events-push-notification-service PROD +- mzName: CD_charging-events-push-notification-service/management-zone/CDcharging-events-push-notification-service.name +- mzId: CD_charging-events-push-notification-service/management-zone/CDcharging-events-push-notification-service.id +- tag: charging-events-push-notification-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDcharging-events-push-notification-service-INT-TEST: +- name: CD_charging-events-push-notification-service INT-TEST +- mzName: CD_charging-events-push-notification-service/management-zone/CDcharging-events-push-notification-service.name +- mzId: CD_charging-events-push-notification-service/management-zone/CDcharging-events-push-notification-service.id +- tag: charging-events-push-notification-service +- skipDeployment: "true" +#Configuration +CDcharging-events-push-notification-service-INT-TEST.EMEA-PreProd: +- name: CD_charging-events-push-notification-service INT-TEST +- mzName: CD_charging-events-push-notification-service/management-zone/CDcharging-events-push-notification-service.name +- mzId: CD_charging-events-push-notification-service/management-zone/CDcharging-events-push-notification-service.id +- tag: charging-events-push-notification-service +- skipDeployment: "false" +CDcharging-events-push-notification-service-INT-TEST.NA-PreProd: +- name: CD_charging-events-push-notification-service INT-TEST +- mzName: CD_charging-events-push-notification-service/management-zone/CDcharging-events-push-notification-service.name +- mzId: CD_charging-events-push-notification-service/management-zone/CDcharging-events-push-notification-service.id +- env: INT +- skipDeployment: "false" +CDcharging-events-push-notification-service-INT-TEST.CN-PreProd: +- name: CD_charging-events-push-notification-service INT-TEST +- mzName: CD_charging-events-push-notification-service/management-zone/CDcharging-events-push-notification-service.name +- mzId: CD_charging-events-push-notification-service/management-zone/CDcharging-events-push-notification-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-push-notification-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-push-notification-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-push-notification-service/management-zone/README.md b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_charging-events-push-notification-service/management-zone/default.json b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-push-notification-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..4e2f5350 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDcharging-events-push-notification-service: default.json + +CDcharging-events-push-notification-service: +- name: CD_charging-events-push-notification-service +- tag: charging-events-push-notification-service diff --git a/BMW-Dynatrace-config/CD_charging-events-push-notification-service/notification/README.md b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-push-notification-service/notification/email.json b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-push-notification-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-push-notification-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/notification/notification.yaml new file mode 100644 index 00000000..61aa13c5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDcharging-events-push-notification-service-PROD: msTeams.json +- CDcharging-events-push-notification-service-E2E: msTeams.json +- CDcharging-events-push-notification-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-events-push-notification-service-PROD: +- name: CD_charging-events-push-notification-service PROD +- alertingProfile: CD_charging-events-push-notification-service/alerting-profile/CDcharging-events-push-notification-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcharging-events-push-notification-service-PROD.EMEA-Prod: +- name: CD_charging-events-push-notification-service PROD +- alertingProfile: CD_charging-events-push-notification-service/alerting-profile/CDcharging-events-push-notification-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-events-push-notification-service-PROD.NA-Prod: +- name: CD_charging-events-push-notification-service PROD +- alertingProfile: CD_charging-events-push-notification-service/alerting-profile/CDcharging-events-push-notification-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-events-push-notification-service-PROD.CN-Prod: +- name: CD_charging-events-push-notification-service PROD +- alertingProfile: CD_charging-events-push-notification-service/alerting-profile/CDcharging-events-push-notification-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-events-push-notification-service-E2E: +- name: CD_charging-events-push-notification-service E2E +- alertingProfile: CD_charging-events-push-notification-service/alerting-profile/CDcharging-events-push-notification-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcharging-events-push-notification-service-E2E.EMEA-Prod: +- name: CD_charging-events-push-notification-service E2E +- alertingProfile: CD_charging-events-push-notification-service/alerting-profile/CDcharging-events-push-notification-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-events-push-notification-service-E2E.NA-Prod: +- name: CD_charging-events-push-notification-service E2E +- alertingProfile: CD_charging-events-push-notification-service/alerting-profile/CDcharging-events-push-notification-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-events-push-notification-service-E2E.CN-Prod: +- name: CD_charging-events-push-notification-service E2E +- alertingProfile: CD_charging-events-push-notification-service/alerting-profile/CDcharging-events-push-notification-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-events-push-notification-service-INT: +- name: CD_charging-events-push-notification-service INT +- alertingProfile: CD_charging-events-push-notification-service/alerting-profile/CDcharging-events-push-notification-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcharging-events-push-notification-service-INT.EMEA-PreProd: +- name: CD_charging-events-push-notification-service INT +- alertingProfile: CD_charging-events-push-notification-service/alerting-profile/CDcharging-events-push-notification-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-events-push-notification-service-INT.NA-PreProd: +- name: CD_charging-events-push-notification-service INT +- alertingProfile: CD_charging-events-push-notification-service/alerting-profile/CDcharging-events-push-notification-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-events-push-notification-service-INT.CN-PreProd: +- name: CD_charging-events-push-notification-service INT +- alertingProfile: CD_charging-events-push-notification-service/alerting-profile/CDcharging-events-push-notification-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-push-notification-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-push-notification-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-push-notification-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..8dbe47d5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- charging-events-push-notification-service: default.json + +charging-events-push-notification-service: +- name: CD_charging-events-push-notification-service - +- mzName: CD_charging-events-push-notification-service/management-zone/CDcharging-events-push-notification-service.name +- mzId: CD_charging-events-push-notification-service/management-zone/CDcharging-events-push-notification-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_charging-events-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..796ff148 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDcharging-events-service-PROD: default.json +- CDcharging-events-service-E2E: default.json +- CDcharging-events-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-events-service-PROD: +- name: CD_charging-events-service PROD +- tag: charging-events-service +- mzId: CD_charging-events-service/management-zone/CDcharging-events-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDcharging-events-service-PROD.EMEA-Prod: +- name: CD_charging-events-service PROD +- tag: charging-events-service +- mzId: CD_charging-events-service/management-zone/CDcharging-events-service.id +- env: PROD +- skipDeployment: "false" +CDcharging-events-service-PROD.NA-Prod: +- name: CD_charging-events-service PROD +- tag: charging-events-service +- mzId: CD_charging-events-service/management-zone/CDcharging-events-service.id +- env: PROD +- skipDeployment: "false" +CDcharging-events-service-PROD.CN-Prod: +- name: CD_charging-events-service PROD +- tag: charging-events-service +- mzId: CD_charging-events-service/management-zone/CDcharging-events-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-events-service-E2E: +- name: CD_charging-events-service E2E +- tag: charging-events-service +- mzId: CD_charging-events-service/management-zone/CDcharging-events-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDcharging-events-service-E2E.EMEA-Prod: +- name: CD_charging-events-service E2E +- tag: charging-events-service +- mzId: CD_charging-events-service/management-zone/CDcharging-events-service.id +- env: E2E +- skipDeployment: "false" +CDcharging-events-service-E2E.NA-Prod: +- name: CD_charging-events-service E2E +- tag: charging-events-service +- mzId: CD_charging-events-service/management-zone/CDcharging-events-service.id +- env: E2E +- skipDeployment: "false" +CDcharging-events-service-E2E.CN-Prod: +- name: CD_charging-events-service E2E +- tag: charging-events-service +- mzId: CD_charging-events-service/management-zone/CDcharging-events-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-events-service-INT: +- name: CD_charging-events-service INT +- tag: charging-events-service +- mzId: CD_charging-events-service/management-zone/CDcharging-events-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDcharging-events-service-INT.EMEA-PreProd: +- name: CD_charging-events-service INT +- tag: charging-events-service +- mzId: CD_charging-events-service/management-zone/CDcharging-events-service.id +- env: INT +- skipDeployment: "false" +CDcharging-events-service-INT.NA-PreProd: +- name: CD_charging-events-service INT +- tag: charging-events-service +- mzId: CD_charging-events-service/management-zone/CDcharging-events-service.id +- env: INT +- skipDeployment: "false" +CDcharging-events-service-INT.CN-PreProd: +- name: CD_charging-events-service INT +- tag: charging-events-service +- mzId: CD_charging-events-service/management-zone/CDcharging-events-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_charging-events-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_charging-events-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_charging-events-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_charging-events-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_charging-events-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-service/dashboard/README.md b/BMW-Dynatrace-config/CD_charging-events-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_charging-events-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..cf64ccbe --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDcharging-events-service-PROD-E2E: defaultPRODE2E.json +- CDcharging-events-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDcharging-events-service-PROD-E2E: +- name: CD_charging-events-service PROD +- mzName: CD_charging-events-service/management-zone/CDcharging-events-service.name +- mzId: CD_charging-events-service/management-zone/CDcharging-events-service.id +- skipDeployment: "true" +#Configuration +CDcharging-events-service-PROD-E2E.EMEA-Prod: +- name: CD_charging-events-service PROD +- mzName: CD_charging-events-service/management-zone/CDcharging-events-service.name +- mzId: CD_charging-events-service/management-zone/CDcharging-events-service.id +- tag: charging-events-service +- skipDeployment: "false" +CDcharging-events-service-PROD-E2E.NA-Prod: +- name: CD_charging-events-service PROD +- mzName: CD_charging-events-service/management-zone/CDcharging-events-service.name +- mzId: CD_charging-events-service/management-zone/CDcharging-events-service.id +- tag: charging-events-service +- skipDeployment: "false" +CDcharging-events-service-PROD-E2E.CN-Prod: +- name: CD_charging-events-service PROD +- mzName: CD_charging-events-service/management-zone/CDcharging-events-service.name +- mzId: CD_charging-events-service/management-zone/CDcharging-events-service.id +- tag: charging-events-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDcharging-events-service-INT-TEST: +- name: CD_charging-events-service INT-TEST +- mzName: CD_charging-events-service/management-zone/CDcharging-events-service.name +- mzId: CD_charging-events-service/management-zone/CDcharging-events-service.id +- tag: charging-events-service +- skipDeployment: "true" +#Configuration +CDcharging-events-service-INT-TEST.EMEA-PreProd: +- name: CD_charging-events-service INT-TEST +- mzName: CD_charging-events-service/management-zone/CDcharging-events-service.name +- mzId: CD_charging-events-service/management-zone/CDcharging-events-service.id +- tag: charging-events-service +- skipDeployment: "false" +CDcharging-events-service-INT-TEST.NA-PreProd: +- name: CD_charging-events-service INT-TEST +- mzName: CD_charging-events-service/management-zone/CDcharging-events-service.name +- mzId: CD_charging-events-service/management-zone/CDcharging-events-service.id +- env: INT +- skipDeployment: "false" +CDcharging-events-service-INT-TEST.CN-PreProd: +- name: CD_charging-events-service INT-TEST +- mzName: CD_charging-events-service/management-zone/CDcharging-events-service.name +- mzId: CD_charging-events-service/management-zone/CDcharging-events-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_charging-events-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_charging-events-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-service/management-zone/README.md b/BMW-Dynatrace-config/CD_charging-events-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_charging-events-service/management-zone/default.json b/BMW-Dynatrace-config/CD_charging-events-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_charging-events-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..51e86eb2 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDcharging-events-service: default.json + +CDcharging-events-service: +- name: CD_charging-events-service +- tag: charging-events-service diff --git a/BMW-Dynatrace-config/CD_charging-events-service/notification/README.md b/BMW-Dynatrace-config/CD_charging-events-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-service/notification/email.json b/BMW-Dynatrace-config/CD_charging-events-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_charging-events-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_charging-events-service/notification/notification.yaml new file mode 100644 index 00000000..cce46e69 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDcharging-events-service-PROD: msTeams.json +- CDcharging-events-service-E2E: msTeams.json +- CDcharging-events-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-events-service-PROD: +- name: CD_charging-events-service PROD +- alertingProfile: CD_charging-events-service/alerting-profile/CDcharging-events-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcharging-events-service-PROD.EMEA-Prod: +- name: CD_charging-events-service PROD +- alertingProfile: CD_charging-events-service/alerting-profile/CDcharging-events-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-events-service-PROD.NA-Prod: +- name: CD_charging-events-service PROD +- alertingProfile: CD_charging-events-service/alerting-profile/CDcharging-events-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-events-service-PROD.CN-Prod: +- name: CD_charging-events-service PROD +- alertingProfile: CD_charging-events-service/alerting-profile/CDcharging-events-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-events-service-E2E: +- name: CD_charging-events-service E2E +- alertingProfile: CD_charging-events-service/alerting-profile/CDcharging-events-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcharging-events-service-E2E.EMEA-Prod: +- name: CD_charging-events-service E2E +- alertingProfile: CD_charging-events-service/alerting-profile/CDcharging-events-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-events-service-E2E.NA-Prod: +- name: CD_charging-events-service E2E +- alertingProfile: CD_charging-events-service/alerting-profile/CDcharging-events-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-events-service-E2E.CN-Prod: +- name: CD_charging-events-service E2E +- alertingProfile: CD_charging-events-service/alerting-profile/CDcharging-events-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-events-service-INT: +- name: CD_charging-events-service INT +- alertingProfile: CD_charging-events-service/alerting-profile/CDcharging-events-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcharging-events-service-INT.EMEA-PreProd: +- name: CD_charging-events-service INT +- alertingProfile: CD_charging-events-service/alerting-profile/CDcharging-events-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-events-service-INT.NA-PreProd: +- name: CD_charging-events-service INT +- alertingProfile: CD_charging-events-service/alerting-profile/CDcharging-events-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-events-service-INT.CN-PreProd: +- name: CD_charging-events-service INT +- alertingProfile: CD_charging-events-service/alerting-profile/CDcharging-events-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_charging-events-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_charging-events-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_charging-events-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..0a2dd358 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- charging-events-service: default.json + +charging-events-service: +- name: CD_charging-events-service - +- mzName: CD_charging-events-service/management-zone/CDcharging-events-service.name +- mzId: CD_charging-events-service/management-zone/CDcharging-events-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..ab879f0b --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDcharging-history-gdpr-proxy-service-PROD: default.json +- CDcharging-history-gdpr-proxy-service-E2E: default.json +- CDcharging-history-gdpr-proxy-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-history-gdpr-proxy-service-PROD: +- name: CD_charging-history-gdpr-proxy-service PROD +- tag: charging-history-gdpr-proxy-service +- mzId: CD_charging-history-gdpr-proxy-service/management-zone/CDcharging-history-gdpr-proxy-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDcharging-history-gdpr-proxy-service-PROD.EMEA-Prod: +- name: CD_charging-history-gdpr-proxy-service PROD +- tag: charging-history-gdpr-proxy-service +- mzId: CD_charging-history-gdpr-proxy-service/management-zone/CDcharging-history-gdpr-proxy-service.id +- env: PROD +- skipDeployment: "false" +CDcharging-history-gdpr-proxy-service-PROD.NA-Prod: +- name: CD_charging-history-gdpr-proxy-service PROD +- tag: charging-history-gdpr-proxy-service +- mzId: CD_charging-history-gdpr-proxy-service/management-zone/CDcharging-history-gdpr-proxy-service.id +- env: PROD +- skipDeployment: "false" +CDcharging-history-gdpr-proxy-service-PROD.CN-Prod: +- name: CD_charging-history-gdpr-proxy-service PROD +- tag: charging-history-gdpr-proxy-service +- mzId: CD_charging-history-gdpr-proxy-service/management-zone/CDcharging-history-gdpr-proxy-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-history-gdpr-proxy-service-E2E: +- name: CD_charging-history-gdpr-proxy-service E2E +- tag: charging-history-gdpr-proxy-service +- mzId: CD_charging-history-gdpr-proxy-service/management-zone/CDcharging-history-gdpr-proxy-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDcharging-history-gdpr-proxy-service-E2E.EMEA-Prod: +- name: CD_charging-history-gdpr-proxy-service E2E +- tag: charging-history-gdpr-proxy-service +- mzId: CD_charging-history-gdpr-proxy-service/management-zone/CDcharging-history-gdpr-proxy-service.id +- env: E2E +- skipDeployment: "false" +CDcharging-history-gdpr-proxy-service-E2E.NA-Prod: +- name: CD_charging-history-gdpr-proxy-service E2E +- tag: charging-history-gdpr-proxy-service +- mzId: CD_charging-history-gdpr-proxy-service/management-zone/CDcharging-history-gdpr-proxy-service.id +- env: E2E +- skipDeployment: "false" +CDcharging-history-gdpr-proxy-service-E2E.CN-Prod: +- name: CD_charging-history-gdpr-proxy-service E2E +- tag: charging-history-gdpr-proxy-service +- mzId: CD_charging-history-gdpr-proxy-service/management-zone/CDcharging-history-gdpr-proxy-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-history-gdpr-proxy-service-INT: +- name: CD_charging-history-gdpr-proxy-service INT +- tag: charging-history-gdpr-proxy-service +- mzId: CD_charging-history-gdpr-proxy-service/management-zone/CDcharging-history-gdpr-proxy-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDcharging-history-gdpr-proxy-service-INT.EMEA-PreProd: +- name: CD_charging-history-gdpr-proxy-service INT +- tag: charging-history-gdpr-proxy-service +- mzId: CD_charging-history-gdpr-proxy-service/management-zone/CDcharging-history-gdpr-proxy-service.id +- env: INT +- skipDeployment: "false" +CDcharging-history-gdpr-proxy-service-INT.NA-PreProd: +- name: CD_charging-history-gdpr-proxy-service INT +- tag: charging-history-gdpr-proxy-service +- mzId: CD_charging-history-gdpr-proxy-service/management-zone/CDcharging-history-gdpr-proxy-service.id +- env: INT +- skipDeployment: "false" +CDcharging-history-gdpr-proxy-service-INT.CN-PreProd: +- name: CD_charging-history-gdpr-proxy-service INT +- tag: charging-history-gdpr-proxy-service +- mzId: CD_charging-history-gdpr-proxy-service/management-zone/CDcharging-history-gdpr-proxy-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/dashboard/README.md b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..b171f57f --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDcharging-history-gdpr-proxy-service-PROD-E2E: defaultPRODE2E.json +- CDcharging-history-gdpr-proxy-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDcharging-history-gdpr-proxy-service-PROD-E2E: +- name: CD_charging-history-gdpr-proxy-service PROD +- mzName: CD_charging-history-gdpr-proxy-service/management-zone/CDcharging-history-gdpr-proxy-service.name +- mzId: CD_charging-history-gdpr-proxy-service/management-zone/CDcharging-history-gdpr-proxy-service.id +- skipDeployment: "true" +#Configuration +CDcharging-history-gdpr-proxy-service-PROD-E2E.EMEA-Prod: +- name: CD_charging-history-gdpr-proxy-service PROD +- mzName: CD_charging-history-gdpr-proxy-service/management-zone/CDcharging-history-gdpr-proxy-service.name +- mzId: CD_charging-history-gdpr-proxy-service/management-zone/CDcharging-history-gdpr-proxy-service.id +- tag: charging-history-gdpr-proxy-service +- skipDeployment: "false" +CDcharging-history-gdpr-proxy-service-PROD-E2E.NA-Prod: +- name: CD_charging-history-gdpr-proxy-service PROD +- mzName: CD_charging-history-gdpr-proxy-service/management-zone/CDcharging-history-gdpr-proxy-service.name +- mzId: CD_charging-history-gdpr-proxy-service/management-zone/CDcharging-history-gdpr-proxy-service.id +- tag: charging-history-gdpr-proxy-service +- skipDeployment: "false" +CDcharging-history-gdpr-proxy-service-PROD-E2E.CN-Prod: +- name: CD_charging-history-gdpr-proxy-service PROD +- mzName: CD_charging-history-gdpr-proxy-service/management-zone/CDcharging-history-gdpr-proxy-service.name +- mzId: CD_charging-history-gdpr-proxy-service/management-zone/CDcharging-history-gdpr-proxy-service.id +- tag: charging-history-gdpr-proxy-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDcharging-history-gdpr-proxy-service-INT-TEST: +- name: CD_charging-history-gdpr-proxy-service INT-TEST +- mzName: CD_charging-history-gdpr-proxy-service/management-zone/CDcharging-history-gdpr-proxy-service.name +- mzId: CD_charging-history-gdpr-proxy-service/management-zone/CDcharging-history-gdpr-proxy-service.id +- tag: charging-history-gdpr-proxy-service +- skipDeployment: "true" +#Configuration +CDcharging-history-gdpr-proxy-service-INT-TEST.EMEA-PreProd: +- name: CD_charging-history-gdpr-proxy-service INT-TEST +- mzName: CD_charging-history-gdpr-proxy-service/management-zone/CDcharging-history-gdpr-proxy-service.name +- mzId: CD_charging-history-gdpr-proxy-service/management-zone/CDcharging-history-gdpr-proxy-service.id +- tag: charging-history-gdpr-proxy-service +- skipDeployment: "false" +CDcharging-history-gdpr-proxy-service-INT-TEST.NA-PreProd: +- name: CD_charging-history-gdpr-proxy-service INT-TEST +- mzName: CD_charging-history-gdpr-proxy-service/management-zone/CDcharging-history-gdpr-proxy-service.name +- mzId: CD_charging-history-gdpr-proxy-service/management-zone/CDcharging-history-gdpr-proxy-service.id +- env: INT +- skipDeployment: "false" +CDcharging-history-gdpr-proxy-service-INT-TEST.CN-PreProd: +- name: CD_charging-history-gdpr-proxy-service INT-TEST +- mzName: CD_charging-history-gdpr-proxy-service/management-zone/CDcharging-history-gdpr-proxy-service.name +- mzId: CD_charging-history-gdpr-proxy-service/management-zone/CDcharging-history-gdpr-proxy-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/management-zone/README.md b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/management-zone/default.json b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..3f15d51a --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDcharging-history-gdpr-proxy-service: default.json + +CDcharging-history-gdpr-proxy-service: +- name: CD_charging-history-gdpr-proxy-service +- tag: charging-history-gdpr-proxy-service diff --git a/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/notification/README.md b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/notification/email.json b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/notification/notification.yaml new file mode 100644 index 00000000..1dba3fbd --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDcharging-history-gdpr-proxy-service-PROD: msTeams.json +- CDcharging-history-gdpr-proxy-service-E2E: msTeams.json +- CDcharging-history-gdpr-proxy-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-history-gdpr-proxy-service-PROD: +- name: CD_charging-history-gdpr-proxy-service PROD +- alertingProfile: CD_charging-history-gdpr-proxy-service/alerting-profile/CDcharging-history-gdpr-proxy-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcharging-history-gdpr-proxy-service-PROD.EMEA-Prod: +- name: CD_charging-history-gdpr-proxy-service PROD +- alertingProfile: CD_charging-history-gdpr-proxy-service/alerting-profile/CDcharging-history-gdpr-proxy-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-history-gdpr-proxy-service-PROD.NA-Prod: +- name: CD_charging-history-gdpr-proxy-service PROD +- alertingProfile: CD_charging-history-gdpr-proxy-service/alerting-profile/CDcharging-history-gdpr-proxy-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-history-gdpr-proxy-service-PROD.CN-Prod: +- name: CD_charging-history-gdpr-proxy-service PROD +- alertingProfile: CD_charging-history-gdpr-proxy-service/alerting-profile/CDcharging-history-gdpr-proxy-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-history-gdpr-proxy-service-E2E: +- name: CD_charging-history-gdpr-proxy-service E2E +- alertingProfile: CD_charging-history-gdpr-proxy-service/alerting-profile/CDcharging-history-gdpr-proxy-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcharging-history-gdpr-proxy-service-E2E.EMEA-Prod: +- name: CD_charging-history-gdpr-proxy-service E2E +- alertingProfile: CD_charging-history-gdpr-proxy-service/alerting-profile/CDcharging-history-gdpr-proxy-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-history-gdpr-proxy-service-E2E.NA-Prod: +- name: CD_charging-history-gdpr-proxy-service E2E +- alertingProfile: CD_charging-history-gdpr-proxy-service/alerting-profile/CDcharging-history-gdpr-proxy-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-history-gdpr-proxy-service-E2E.CN-Prod: +- name: CD_charging-history-gdpr-proxy-service E2E +- alertingProfile: CD_charging-history-gdpr-proxy-service/alerting-profile/CDcharging-history-gdpr-proxy-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-history-gdpr-proxy-service-INT: +- name: CD_charging-history-gdpr-proxy-service INT +- alertingProfile: CD_charging-history-gdpr-proxy-service/alerting-profile/CDcharging-history-gdpr-proxy-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcharging-history-gdpr-proxy-service-INT.EMEA-PreProd: +- name: CD_charging-history-gdpr-proxy-service INT +- alertingProfile: CD_charging-history-gdpr-proxy-service/alerting-profile/CDcharging-history-gdpr-proxy-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-history-gdpr-proxy-service-INT.NA-PreProd: +- name: CD_charging-history-gdpr-proxy-service INT +- alertingProfile: CD_charging-history-gdpr-proxy-service/alerting-profile/CDcharging-history-gdpr-proxy-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-history-gdpr-proxy-service-INT.CN-PreProd: +- name: CD_charging-history-gdpr-proxy-service INT +- alertingProfile: CD_charging-history-gdpr-proxy-service/alerting-profile/CDcharging-history-gdpr-proxy-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..cb8a2c94 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- charging-history-gdpr-proxy-service: default.json + +charging-history-gdpr-proxy-service: +- name: CD_charging-history-gdpr-proxy-service - +- mzName: CD_charging-history-gdpr-proxy-service/management-zone/CDcharging-history-gdpr-proxy-service.name +- mzId: CD_charging-history-gdpr-proxy-service/management-zone/CDcharging-history-gdpr-proxy-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-plan-composite-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_charging-plan-composite-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..765eb2c7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-plan-composite-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDcharging-plan-composite-service-PROD: default.json +- CDcharging-plan-composite-service-E2E: default.json +- CDcharging-plan-composite-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-plan-composite-service-PROD: +- name: CD_charging-plan-composite-service PROD +- tag: charging-plan-composite-service +- mzId: CD_charging-plan-composite-service/management-zone/CDcharging-plan-composite-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDcharging-plan-composite-service-PROD.EMEA-Prod: +- name: CD_charging-plan-composite-service PROD +- tag: charging-plan-composite-service +- mzId: CD_charging-plan-composite-service/management-zone/CDcharging-plan-composite-service.id +- env: PROD +- skipDeployment: "false" +CDcharging-plan-composite-service-PROD.NA-Prod: +- name: CD_charging-plan-composite-service PROD +- tag: charging-plan-composite-service +- mzId: CD_charging-plan-composite-service/management-zone/CDcharging-plan-composite-service.id +- env: PROD +- skipDeployment: "false" +CDcharging-plan-composite-service-PROD.CN-Prod: +- name: CD_charging-plan-composite-service PROD +- tag: charging-plan-composite-service +- mzId: CD_charging-plan-composite-service/management-zone/CDcharging-plan-composite-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-plan-composite-service-E2E: +- name: CD_charging-plan-composite-service E2E +- tag: charging-plan-composite-service +- mzId: CD_charging-plan-composite-service/management-zone/CDcharging-plan-composite-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDcharging-plan-composite-service-E2E.EMEA-Prod: +- name: CD_charging-plan-composite-service E2E +- tag: charging-plan-composite-service +- mzId: CD_charging-plan-composite-service/management-zone/CDcharging-plan-composite-service.id +- env: E2E +- skipDeployment: "false" +CDcharging-plan-composite-service-E2E.NA-Prod: +- name: CD_charging-plan-composite-service E2E +- tag: charging-plan-composite-service +- mzId: CD_charging-plan-composite-service/management-zone/CDcharging-plan-composite-service.id +- env: E2E +- skipDeployment: "false" +CDcharging-plan-composite-service-E2E.CN-Prod: +- name: CD_charging-plan-composite-service E2E +- tag: charging-plan-composite-service +- mzId: CD_charging-plan-composite-service/management-zone/CDcharging-plan-composite-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-plan-composite-service-INT: +- name: CD_charging-plan-composite-service INT +- tag: charging-plan-composite-service +- mzId: CD_charging-plan-composite-service/management-zone/CDcharging-plan-composite-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDcharging-plan-composite-service-INT.EMEA-PreProd: +- name: CD_charging-plan-composite-service INT +- tag: charging-plan-composite-service +- mzId: CD_charging-plan-composite-service/management-zone/CDcharging-plan-composite-service.id +- env: INT +- skipDeployment: "false" +CDcharging-plan-composite-service-INT.NA-PreProd: +- name: CD_charging-plan-composite-service INT +- tag: charging-plan-composite-service +- mzId: CD_charging-plan-composite-service/management-zone/CDcharging-plan-composite-service.id +- env: INT +- skipDeployment: "false" +CDcharging-plan-composite-service-INT.CN-PreProd: +- name: CD_charging-plan-composite-service INT +- tag: charging-plan-composite-service +- mzId: CD_charging-plan-composite-service/management-zone/CDcharging-plan-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-plan-composite-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_charging-plan-composite-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-plan-composite-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-plan-composite-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_charging-plan-composite-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-plan-composite-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-plan-composite-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_charging-plan-composite-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-plan-composite-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-plan-composite-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_charging-plan-composite-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-plan-composite-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-plan-composite-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_charging-plan-composite-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-plan-composite-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-plan-composite-service/dashboard/README.md b/BMW-Dynatrace-config/CD_charging-plan-composite-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-plan-composite-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-plan-composite-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_charging-plan-composite-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..bafa83a4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-plan-composite-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDcharging-plan-composite-service-PROD-E2E: defaultPRODE2E.json +- CDcharging-plan-composite-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDcharging-plan-composite-service-PROD-E2E: +- name: CD_charging-plan-composite-service PROD +- mzName: CD_charging-plan-composite-service/management-zone/CDcharging-plan-composite-service.name +- mzId: CD_charging-plan-composite-service/management-zone/CDcharging-plan-composite-service.id +- skipDeployment: "true" +#Configuration +CDcharging-plan-composite-service-PROD-E2E.EMEA-Prod: +- name: CD_charging-plan-composite-service PROD +- mzName: CD_charging-plan-composite-service/management-zone/CDcharging-plan-composite-service.name +- mzId: CD_charging-plan-composite-service/management-zone/CDcharging-plan-composite-service.id +- tag: charging-plan-composite-service +- skipDeployment: "false" +CDcharging-plan-composite-service-PROD-E2E.NA-Prod: +- name: CD_charging-plan-composite-service PROD +- mzName: CD_charging-plan-composite-service/management-zone/CDcharging-plan-composite-service.name +- mzId: CD_charging-plan-composite-service/management-zone/CDcharging-plan-composite-service.id +- tag: charging-plan-composite-service +- skipDeployment: "false" +CDcharging-plan-composite-service-PROD-E2E.CN-Prod: +- name: CD_charging-plan-composite-service PROD +- mzName: CD_charging-plan-composite-service/management-zone/CDcharging-plan-composite-service.name +- mzId: CD_charging-plan-composite-service/management-zone/CDcharging-plan-composite-service.id +- tag: charging-plan-composite-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDcharging-plan-composite-service-INT-TEST: +- name: CD_charging-plan-composite-service INT-TEST +- mzName: CD_charging-plan-composite-service/management-zone/CDcharging-plan-composite-service.name +- mzId: CD_charging-plan-composite-service/management-zone/CDcharging-plan-composite-service.id +- tag: charging-plan-composite-service +- skipDeployment: "true" +#Configuration +CDcharging-plan-composite-service-INT-TEST.EMEA-PreProd: +- name: CD_charging-plan-composite-service INT-TEST +- mzName: CD_charging-plan-composite-service/management-zone/CDcharging-plan-composite-service.name +- mzId: CD_charging-plan-composite-service/management-zone/CDcharging-plan-composite-service.id +- tag: charging-plan-composite-service +- skipDeployment: "false" +CDcharging-plan-composite-service-INT-TEST.NA-PreProd: +- name: CD_charging-plan-composite-service INT-TEST +- mzName: CD_charging-plan-composite-service/management-zone/CDcharging-plan-composite-service.name +- mzId: CD_charging-plan-composite-service/management-zone/CDcharging-plan-composite-service.id +- env: INT +- skipDeployment: "false" +CDcharging-plan-composite-service-INT-TEST.CN-PreProd: +- name: CD_charging-plan-composite-service INT-TEST +- mzName: CD_charging-plan-composite-service/management-zone/CDcharging-plan-composite-service.name +- mzId: CD_charging-plan-composite-service/management-zone/CDcharging-plan-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-plan-composite-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_charging-plan-composite-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-plan-composite-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-plan-composite-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_charging-plan-composite-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-plan-composite-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-plan-composite-service/management-zone/README.md b/BMW-Dynatrace-config/CD_charging-plan-composite-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-plan-composite-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_charging-plan-composite-service/management-zone/default.json b/BMW-Dynatrace-config/CD_charging-plan-composite-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-plan-composite-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-plan-composite-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_charging-plan-composite-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..19682a33 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-plan-composite-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDcharging-plan-composite-service: default.json + +CDcharging-plan-composite-service: +- name: CD_charging-plan-composite-service +- tag: charging-plan-composite-service diff --git a/BMW-Dynatrace-config/CD_charging-plan-composite-service/notification/README.md b/BMW-Dynatrace-config/CD_charging-plan-composite-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-plan-composite-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-plan-composite-service/notification/email.json b/BMW-Dynatrace-config/CD_charging-plan-composite-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-plan-composite-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-plan-composite-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_charging-plan-composite-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-plan-composite-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-plan-composite-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_charging-plan-composite-service/notification/notification.yaml new file mode 100644 index 00000000..72572d7b --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-plan-composite-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDcharging-plan-composite-service-PROD: msTeams.json +- CDcharging-plan-composite-service-E2E: msTeams.json +- CDcharging-plan-composite-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-plan-composite-service-PROD: +- name: CD_charging-plan-composite-service PROD +- alertingProfile: CD_charging-plan-composite-service/alerting-profile/CDcharging-plan-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcharging-plan-composite-service-PROD.EMEA-Prod: +- name: CD_charging-plan-composite-service PROD +- alertingProfile: CD_charging-plan-composite-service/alerting-profile/CDcharging-plan-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-plan-composite-service-PROD.NA-Prod: +- name: CD_charging-plan-composite-service PROD +- alertingProfile: CD_charging-plan-composite-service/alerting-profile/CDcharging-plan-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-plan-composite-service-PROD.CN-Prod: +- name: CD_charging-plan-composite-service PROD +- alertingProfile: CD_charging-plan-composite-service/alerting-profile/CDcharging-plan-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-plan-composite-service-E2E: +- name: CD_charging-plan-composite-service E2E +- alertingProfile: CD_charging-plan-composite-service/alerting-profile/CDcharging-plan-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcharging-plan-composite-service-E2E.EMEA-Prod: +- name: CD_charging-plan-composite-service E2E +- alertingProfile: CD_charging-plan-composite-service/alerting-profile/CDcharging-plan-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-plan-composite-service-E2E.NA-Prod: +- name: CD_charging-plan-composite-service E2E +- alertingProfile: CD_charging-plan-composite-service/alerting-profile/CDcharging-plan-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-plan-composite-service-E2E.CN-Prod: +- name: CD_charging-plan-composite-service E2E +- alertingProfile: CD_charging-plan-composite-service/alerting-profile/CDcharging-plan-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-plan-composite-service-INT: +- name: CD_charging-plan-composite-service INT +- alertingProfile: CD_charging-plan-composite-service/alerting-profile/CDcharging-plan-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcharging-plan-composite-service-INT.EMEA-PreProd: +- name: CD_charging-plan-composite-service INT +- alertingProfile: CD_charging-plan-composite-service/alerting-profile/CDcharging-plan-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-plan-composite-service-INT.NA-PreProd: +- name: CD_charging-plan-composite-service INT +- alertingProfile: CD_charging-plan-composite-service/alerting-profile/CDcharging-plan-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-plan-composite-service-INT.CN-PreProd: +- name: CD_charging-plan-composite-service INT +- alertingProfile: CD_charging-plan-composite-service/alerting-profile/CDcharging-plan-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-plan-composite-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_charging-plan-composite-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-plan-composite-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-plan-composite-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_charging-plan-composite-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-plan-composite-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-plan-composite-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_charging-plan-composite-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..f33ecaae --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-plan-composite-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- charging-plan-composite-service: default.json + +charging-plan-composite-service: +- name: CD_charging-plan-composite-service - +- mzName: CD_charging-plan-composite-service/management-zone/CDcharging-plan-composite-service.name +- mzId: CD_charging-plan-composite-service/management-zone/CDcharging-plan-composite-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-push-notifications-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_charging-push-notifications-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..190ae5e0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-push-notifications-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDcharging-push-notifications-service-PROD: default.json +- CDcharging-push-notifications-service-E2E: default.json +- CDcharging-push-notifications-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-push-notifications-service-PROD: +- name: CD_charging-push-notifications-service PROD +- tag: charging-push-notifications-service +- mzId: CD_charging-push-notifications-service/management-zone/CDcharging-push-notifications-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDcharging-push-notifications-service-PROD.EMEA-Prod: +- name: CD_charging-push-notifications-service PROD +- tag: charging-push-notifications-service +- mzId: CD_charging-push-notifications-service/management-zone/CDcharging-push-notifications-service.id +- env: PROD +- skipDeployment: "false" +CDcharging-push-notifications-service-PROD.NA-Prod: +- name: CD_charging-push-notifications-service PROD +- tag: charging-push-notifications-service +- mzId: CD_charging-push-notifications-service/management-zone/CDcharging-push-notifications-service.id +- env: PROD +- skipDeployment: "false" +CDcharging-push-notifications-service-PROD.CN-Prod: +- name: CD_charging-push-notifications-service PROD +- tag: charging-push-notifications-service +- mzId: CD_charging-push-notifications-service/management-zone/CDcharging-push-notifications-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-push-notifications-service-E2E: +- name: CD_charging-push-notifications-service E2E +- tag: charging-push-notifications-service +- mzId: CD_charging-push-notifications-service/management-zone/CDcharging-push-notifications-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDcharging-push-notifications-service-E2E.EMEA-Prod: +- name: CD_charging-push-notifications-service E2E +- tag: charging-push-notifications-service +- mzId: CD_charging-push-notifications-service/management-zone/CDcharging-push-notifications-service.id +- env: E2E +- skipDeployment: "false" +CDcharging-push-notifications-service-E2E.NA-Prod: +- name: CD_charging-push-notifications-service E2E +- tag: charging-push-notifications-service +- mzId: CD_charging-push-notifications-service/management-zone/CDcharging-push-notifications-service.id +- env: E2E +- skipDeployment: "false" +CDcharging-push-notifications-service-E2E.CN-Prod: +- name: CD_charging-push-notifications-service E2E +- tag: charging-push-notifications-service +- mzId: CD_charging-push-notifications-service/management-zone/CDcharging-push-notifications-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-push-notifications-service-INT: +- name: CD_charging-push-notifications-service INT +- tag: charging-push-notifications-service +- mzId: CD_charging-push-notifications-service/management-zone/CDcharging-push-notifications-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDcharging-push-notifications-service-INT.EMEA-PreProd: +- name: CD_charging-push-notifications-service INT +- tag: charging-push-notifications-service +- mzId: CD_charging-push-notifications-service/management-zone/CDcharging-push-notifications-service.id +- env: INT +- skipDeployment: "false" +CDcharging-push-notifications-service-INT.NA-PreProd: +- name: CD_charging-push-notifications-service INT +- tag: charging-push-notifications-service +- mzId: CD_charging-push-notifications-service/management-zone/CDcharging-push-notifications-service.id +- env: INT +- skipDeployment: "false" +CDcharging-push-notifications-service-INT.CN-PreProd: +- name: CD_charging-push-notifications-service INT +- tag: charging-push-notifications-service +- mzId: CD_charging-push-notifications-service/management-zone/CDcharging-push-notifications-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-push-notifications-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_charging-push-notifications-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-push-notifications-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-push-notifications-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_charging-push-notifications-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-push-notifications-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-push-notifications-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_charging-push-notifications-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-push-notifications-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-push-notifications-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_charging-push-notifications-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-push-notifications-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-push-notifications-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_charging-push-notifications-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-push-notifications-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-push-notifications-service/dashboard/README.md b/BMW-Dynatrace-config/CD_charging-push-notifications-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-push-notifications-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-push-notifications-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_charging-push-notifications-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..cfdb927b --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-push-notifications-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDcharging-push-notifications-service-PROD-E2E: defaultPRODE2E.json +- CDcharging-push-notifications-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDcharging-push-notifications-service-PROD-E2E: +- name: CD_charging-push-notifications-service PROD +- mzName: CD_charging-push-notifications-service/management-zone/CDcharging-push-notifications-service.name +- mzId: CD_charging-push-notifications-service/management-zone/CDcharging-push-notifications-service.id +- skipDeployment: "true" +#Configuration +CDcharging-push-notifications-service-PROD-E2E.EMEA-Prod: +- name: CD_charging-push-notifications-service PROD +- mzName: CD_charging-push-notifications-service/management-zone/CDcharging-push-notifications-service.name +- mzId: CD_charging-push-notifications-service/management-zone/CDcharging-push-notifications-service.id +- tag: charging-push-notifications-service +- skipDeployment: "false" +CDcharging-push-notifications-service-PROD-E2E.NA-Prod: +- name: CD_charging-push-notifications-service PROD +- mzName: CD_charging-push-notifications-service/management-zone/CDcharging-push-notifications-service.name +- mzId: CD_charging-push-notifications-service/management-zone/CDcharging-push-notifications-service.id +- tag: charging-push-notifications-service +- skipDeployment: "false" +CDcharging-push-notifications-service-PROD-E2E.CN-Prod: +- name: CD_charging-push-notifications-service PROD +- mzName: CD_charging-push-notifications-service/management-zone/CDcharging-push-notifications-service.name +- mzId: CD_charging-push-notifications-service/management-zone/CDcharging-push-notifications-service.id +- tag: charging-push-notifications-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDcharging-push-notifications-service-INT-TEST: +- name: CD_charging-push-notifications-service INT-TEST +- mzName: CD_charging-push-notifications-service/management-zone/CDcharging-push-notifications-service.name +- mzId: CD_charging-push-notifications-service/management-zone/CDcharging-push-notifications-service.id +- tag: charging-push-notifications-service +- skipDeployment: "true" +#Configuration +CDcharging-push-notifications-service-INT-TEST.EMEA-PreProd: +- name: CD_charging-push-notifications-service INT-TEST +- mzName: CD_charging-push-notifications-service/management-zone/CDcharging-push-notifications-service.name +- mzId: CD_charging-push-notifications-service/management-zone/CDcharging-push-notifications-service.id +- tag: charging-push-notifications-service +- skipDeployment: "false" +CDcharging-push-notifications-service-INT-TEST.NA-PreProd: +- name: CD_charging-push-notifications-service INT-TEST +- mzName: CD_charging-push-notifications-service/management-zone/CDcharging-push-notifications-service.name +- mzId: CD_charging-push-notifications-service/management-zone/CDcharging-push-notifications-service.id +- env: INT +- skipDeployment: "false" +CDcharging-push-notifications-service-INT-TEST.CN-PreProd: +- name: CD_charging-push-notifications-service INT-TEST +- mzName: CD_charging-push-notifications-service/management-zone/CDcharging-push-notifications-service.name +- mzId: CD_charging-push-notifications-service/management-zone/CDcharging-push-notifications-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-push-notifications-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_charging-push-notifications-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-push-notifications-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-push-notifications-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_charging-push-notifications-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-push-notifications-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-push-notifications-service/management-zone/README.md b/BMW-Dynatrace-config/CD_charging-push-notifications-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-push-notifications-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_charging-push-notifications-service/management-zone/default.json b/BMW-Dynatrace-config/CD_charging-push-notifications-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-push-notifications-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-push-notifications-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_charging-push-notifications-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..78f2b1d8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-push-notifications-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDcharging-push-notifications-service: default.json + +CDcharging-push-notifications-service: +- name: CD_charging-push-notifications-service +- tag: charging-push-notifications-service diff --git a/BMW-Dynatrace-config/CD_charging-push-notifications-service/notification/README.md b/BMW-Dynatrace-config/CD_charging-push-notifications-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-push-notifications-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-push-notifications-service/notification/email.json b/BMW-Dynatrace-config/CD_charging-push-notifications-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-push-notifications-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-push-notifications-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_charging-push-notifications-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-push-notifications-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-push-notifications-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_charging-push-notifications-service/notification/notification.yaml new file mode 100644 index 00000000..2bdd559b --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-push-notifications-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDcharging-push-notifications-service-PROD: msTeams.json +- CDcharging-push-notifications-service-E2E: msTeams.json +- CDcharging-push-notifications-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-push-notifications-service-PROD: +- name: CD_charging-push-notifications-service PROD +- alertingProfile: CD_charging-push-notifications-service/alerting-profile/CDcharging-push-notifications-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcharging-push-notifications-service-PROD.EMEA-Prod: +- name: CD_charging-push-notifications-service PROD +- alertingProfile: CD_charging-push-notifications-service/alerting-profile/CDcharging-push-notifications-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-push-notifications-service-PROD.NA-Prod: +- name: CD_charging-push-notifications-service PROD +- alertingProfile: CD_charging-push-notifications-service/alerting-profile/CDcharging-push-notifications-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-push-notifications-service-PROD.CN-Prod: +- name: CD_charging-push-notifications-service PROD +- alertingProfile: CD_charging-push-notifications-service/alerting-profile/CDcharging-push-notifications-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-push-notifications-service-E2E: +- name: CD_charging-push-notifications-service E2E +- alertingProfile: CD_charging-push-notifications-service/alerting-profile/CDcharging-push-notifications-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcharging-push-notifications-service-E2E.EMEA-Prod: +- name: CD_charging-push-notifications-service E2E +- alertingProfile: CD_charging-push-notifications-service/alerting-profile/CDcharging-push-notifications-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-push-notifications-service-E2E.NA-Prod: +- name: CD_charging-push-notifications-service E2E +- alertingProfile: CD_charging-push-notifications-service/alerting-profile/CDcharging-push-notifications-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-push-notifications-service-E2E.CN-Prod: +- name: CD_charging-push-notifications-service E2E +- alertingProfile: CD_charging-push-notifications-service/alerting-profile/CDcharging-push-notifications-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-push-notifications-service-INT: +- name: CD_charging-push-notifications-service INT +- alertingProfile: CD_charging-push-notifications-service/alerting-profile/CDcharging-push-notifications-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcharging-push-notifications-service-INT.EMEA-PreProd: +- name: CD_charging-push-notifications-service INT +- alertingProfile: CD_charging-push-notifications-service/alerting-profile/CDcharging-push-notifications-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-push-notifications-service-INT.NA-PreProd: +- name: CD_charging-push-notifications-service INT +- alertingProfile: CD_charging-push-notifications-service/alerting-profile/CDcharging-push-notifications-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-push-notifications-service-INT.CN-PreProd: +- name: CD_charging-push-notifications-service INT +- alertingProfile: CD_charging-push-notifications-service/alerting-profile/CDcharging-push-notifications-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-push-notifications-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_charging-push-notifications-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-push-notifications-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-push-notifications-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_charging-push-notifications-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-push-notifications-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-push-notifications-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_charging-push-notifications-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..d2cfd13e --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-push-notifications-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- charging-push-notifications-service: default.json + +charging-push-notifications-service: +- name: CD_charging-push-notifications-service - +- mzName: CD_charging-push-notifications-service/management-zone/CDcharging-push-notifications-service.name +- mzId: CD_charging-push-notifications-service/management-zone/CDcharging-push-notifications-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..4273120e --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDcharging-remote-commands-composite-service-PROD: default.json +- CDcharging-remote-commands-composite-service-E2E: default.json +- CDcharging-remote-commands-composite-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-remote-commands-composite-service-PROD: +- name: CD_charging-remote-commands-composite-service PROD +- tag: charging-remote-commands-composite-service +- mzId: CD_charging-remote-commands-composite-service/management-zone/CDcharging-remote-commands-composite-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDcharging-remote-commands-composite-service-PROD.EMEA-Prod: +- name: CD_charging-remote-commands-composite-service PROD +- tag: charging-remote-commands-composite-service +- mzId: CD_charging-remote-commands-composite-service/management-zone/CDcharging-remote-commands-composite-service.id +- env: PROD +- skipDeployment: "false" +CDcharging-remote-commands-composite-service-PROD.NA-Prod: +- name: CD_charging-remote-commands-composite-service PROD +- tag: charging-remote-commands-composite-service +- mzId: CD_charging-remote-commands-composite-service/management-zone/CDcharging-remote-commands-composite-service.id +- env: PROD +- skipDeployment: "false" +CDcharging-remote-commands-composite-service-PROD.CN-Prod: +- name: CD_charging-remote-commands-composite-service PROD +- tag: charging-remote-commands-composite-service +- mzId: CD_charging-remote-commands-composite-service/management-zone/CDcharging-remote-commands-composite-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-remote-commands-composite-service-E2E: +- name: CD_charging-remote-commands-composite-service E2E +- tag: charging-remote-commands-composite-service +- mzId: CD_charging-remote-commands-composite-service/management-zone/CDcharging-remote-commands-composite-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDcharging-remote-commands-composite-service-E2E.EMEA-Prod: +- name: CD_charging-remote-commands-composite-service E2E +- tag: charging-remote-commands-composite-service +- mzId: CD_charging-remote-commands-composite-service/management-zone/CDcharging-remote-commands-composite-service.id +- env: E2E +- skipDeployment: "false" +CDcharging-remote-commands-composite-service-E2E.NA-Prod: +- name: CD_charging-remote-commands-composite-service E2E +- tag: charging-remote-commands-composite-service +- mzId: CD_charging-remote-commands-composite-service/management-zone/CDcharging-remote-commands-composite-service.id +- env: E2E +- skipDeployment: "false" +CDcharging-remote-commands-composite-service-E2E.CN-Prod: +- name: CD_charging-remote-commands-composite-service E2E +- tag: charging-remote-commands-composite-service +- mzId: CD_charging-remote-commands-composite-service/management-zone/CDcharging-remote-commands-composite-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-remote-commands-composite-service-INT: +- name: CD_charging-remote-commands-composite-service INT +- tag: charging-remote-commands-composite-service +- mzId: CD_charging-remote-commands-composite-service/management-zone/CDcharging-remote-commands-composite-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDcharging-remote-commands-composite-service-INT.EMEA-PreProd: +- name: CD_charging-remote-commands-composite-service INT +- tag: charging-remote-commands-composite-service +- mzId: CD_charging-remote-commands-composite-service/management-zone/CDcharging-remote-commands-composite-service.id +- env: INT +- skipDeployment: "false" +CDcharging-remote-commands-composite-service-INT.NA-PreProd: +- name: CD_charging-remote-commands-composite-service INT +- tag: charging-remote-commands-composite-service +- mzId: CD_charging-remote-commands-composite-service/management-zone/CDcharging-remote-commands-composite-service.id +- env: INT +- skipDeployment: "false" +CDcharging-remote-commands-composite-service-INT.CN-PreProd: +- name: CD_charging-remote-commands-composite-service INT +- tag: charging-remote-commands-composite-service +- mzId: CD_charging-remote-commands-composite-service/management-zone/CDcharging-remote-commands-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/dashboard/README.md b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..c95c2a2c --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDcharging-remote-commands-composite-service-PROD-E2E: defaultPRODE2E.json +- CDcharging-remote-commands-composite-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDcharging-remote-commands-composite-service-PROD-E2E: +- name: CD_charging-remote-commands-composite-service PROD +- mzName: CD_charging-remote-commands-composite-service/management-zone/CDcharging-remote-commands-composite-service.name +- mzId: CD_charging-remote-commands-composite-service/management-zone/CDcharging-remote-commands-composite-service.id +- skipDeployment: "true" +#Configuration +CDcharging-remote-commands-composite-service-PROD-E2E.EMEA-Prod: +- name: CD_charging-remote-commands-composite-service PROD +- mzName: CD_charging-remote-commands-composite-service/management-zone/CDcharging-remote-commands-composite-service.name +- mzId: CD_charging-remote-commands-composite-service/management-zone/CDcharging-remote-commands-composite-service.id +- tag: charging-remote-commands-composite-service +- skipDeployment: "false" +CDcharging-remote-commands-composite-service-PROD-E2E.NA-Prod: +- name: CD_charging-remote-commands-composite-service PROD +- mzName: CD_charging-remote-commands-composite-service/management-zone/CDcharging-remote-commands-composite-service.name +- mzId: CD_charging-remote-commands-composite-service/management-zone/CDcharging-remote-commands-composite-service.id +- tag: charging-remote-commands-composite-service +- skipDeployment: "false" +CDcharging-remote-commands-composite-service-PROD-E2E.CN-Prod: +- name: CD_charging-remote-commands-composite-service PROD +- mzName: CD_charging-remote-commands-composite-service/management-zone/CDcharging-remote-commands-composite-service.name +- mzId: CD_charging-remote-commands-composite-service/management-zone/CDcharging-remote-commands-composite-service.id +- tag: charging-remote-commands-composite-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDcharging-remote-commands-composite-service-INT-TEST: +- name: CD_charging-remote-commands-composite-service INT-TEST +- mzName: CD_charging-remote-commands-composite-service/management-zone/CDcharging-remote-commands-composite-service.name +- mzId: CD_charging-remote-commands-composite-service/management-zone/CDcharging-remote-commands-composite-service.id +- tag: charging-remote-commands-composite-service +- skipDeployment: "true" +#Configuration +CDcharging-remote-commands-composite-service-INT-TEST.EMEA-PreProd: +- name: CD_charging-remote-commands-composite-service INT-TEST +- mzName: CD_charging-remote-commands-composite-service/management-zone/CDcharging-remote-commands-composite-service.name +- mzId: CD_charging-remote-commands-composite-service/management-zone/CDcharging-remote-commands-composite-service.id +- tag: charging-remote-commands-composite-service +- skipDeployment: "false" +CDcharging-remote-commands-composite-service-INT-TEST.NA-PreProd: +- name: CD_charging-remote-commands-composite-service INT-TEST +- mzName: CD_charging-remote-commands-composite-service/management-zone/CDcharging-remote-commands-composite-service.name +- mzId: CD_charging-remote-commands-composite-service/management-zone/CDcharging-remote-commands-composite-service.id +- env: INT +- skipDeployment: "false" +CDcharging-remote-commands-composite-service-INT-TEST.CN-PreProd: +- name: CD_charging-remote-commands-composite-service INT-TEST +- mzName: CD_charging-remote-commands-composite-service/management-zone/CDcharging-remote-commands-composite-service.name +- mzId: CD_charging-remote-commands-composite-service/management-zone/CDcharging-remote-commands-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/management-zone/README.md b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/management-zone/default.json b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..3fdb6a00 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDcharging-remote-commands-composite-service: default.json + +CDcharging-remote-commands-composite-service: +- name: CD_charging-remote-commands-composite-service +- tag: charging-remote-commands-composite-service diff --git a/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/notification/README.md b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/notification/email.json b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/notification/notification.yaml new file mode 100644 index 00000000..6af4adad --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDcharging-remote-commands-composite-service-PROD: msTeams.json +- CDcharging-remote-commands-composite-service-E2E: msTeams.json +- CDcharging-remote-commands-composite-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-remote-commands-composite-service-PROD: +- name: CD_charging-remote-commands-composite-service PROD +- alertingProfile: CD_charging-remote-commands-composite-service/alerting-profile/CDcharging-remote-commands-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcharging-remote-commands-composite-service-PROD.EMEA-Prod: +- name: CD_charging-remote-commands-composite-service PROD +- alertingProfile: CD_charging-remote-commands-composite-service/alerting-profile/CDcharging-remote-commands-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-remote-commands-composite-service-PROD.NA-Prod: +- name: CD_charging-remote-commands-composite-service PROD +- alertingProfile: CD_charging-remote-commands-composite-service/alerting-profile/CDcharging-remote-commands-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-remote-commands-composite-service-PROD.CN-Prod: +- name: CD_charging-remote-commands-composite-service PROD +- alertingProfile: CD_charging-remote-commands-composite-service/alerting-profile/CDcharging-remote-commands-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-remote-commands-composite-service-E2E: +- name: CD_charging-remote-commands-composite-service E2E +- alertingProfile: CD_charging-remote-commands-composite-service/alerting-profile/CDcharging-remote-commands-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcharging-remote-commands-composite-service-E2E.EMEA-Prod: +- name: CD_charging-remote-commands-composite-service E2E +- alertingProfile: CD_charging-remote-commands-composite-service/alerting-profile/CDcharging-remote-commands-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-remote-commands-composite-service-E2E.NA-Prod: +- name: CD_charging-remote-commands-composite-service E2E +- alertingProfile: CD_charging-remote-commands-composite-service/alerting-profile/CDcharging-remote-commands-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-remote-commands-composite-service-E2E.CN-Prod: +- name: CD_charging-remote-commands-composite-service E2E +- alertingProfile: CD_charging-remote-commands-composite-service/alerting-profile/CDcharging-remote-commands-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-remote-commands-composite-service-INT: +- name: CD_charging-remote-commands-composite-service INT +- alertingProfile: CD_charging-remote-commands-composite-service/alerting-profile/CDcharging-remote-commands-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcharging-remote-commands-composite-service-INT.EMEA-PreProd: +- name: CD_charging-remote-commands-composite-service INT +- alertingProfile: CD_charging-remote-commands-composite-service/alerting-profile/CDcharging-remote-commands-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-remote-commands-composite-service-INT.NA-PreProd: +- name: CD_charging-remote-commands-composite-service INT +- alertingProfile: CD_charging-remote-commands-composite-service/alerting-profile/CDcharging-remote-commands-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-remote-commands-composite-service-INT.CN-PreProd: +- name: CD_charging-remote-commands-composite-service INT +- alertingProfile: CD_charging-remote-commands-composite-service/alerting-profile/CDcharging-remote-commands-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..2c691d12 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- charging-remote-commands-composite-service: default.json + +charging-remote-commands-composite-service: +- name: CD_charging-remote-commands-composite-service - +- mzName: CD_charging-remote-commands-composite-service/management-zone/CDcharging-remote-commands-composite-service.name +- mzId: CD_charging-remote-commands-composite-service/management-zone/CDcharging-remote-commands-composite-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-sessions-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_charging-sessions-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..d1cb999f --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-sessions-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDcharging-sessions-service-PROD: default.json +- CDcharging-sessions-service-E2E: default.json +- CDcharging-sessions-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-sessions-service-PROD: +- name: CD_charging-sessions-service PROD +- tag: charging-sessions-service +- mzId: CD_charging-sessions-service/management-zone/CDcharging-sessions-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDcharging-sessions-service-PROD.EMEA-Prod: +- name: CD_charging-sessions-service PROD +- tag: charging-sessions-service +- mzId: CD_charging-sessions-service/management-zone/CDcharging-sessions-service.id +- env: PROD +- skipDeployment: "false" +CDcharging-sessions-service-PROD.NA-Prod: +- name: CD_charging-sessions-service PROD +- tag: charging-sessions-service +- mzId: CD_charging-sessions-service/management-zone/CDcharging-sessions-service.id +- env: PROD +- skipDeployment: "false" +CDcharging-sessions-service-PROD.CN-Prod: +- name: CD_charging-sessions-service PROD +- tag: charging-sessions-service +- mzId: CD_charging-sessions-service/management-zone/CDcharging-sessions-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-sessions-service-E2E: +- name: CD_charging-sessions-service E2E +- tag: charging-sessions-service +- mzId: CD_charging-sessions-service/management-zone/CDcharging-sessions-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDcharging-sessions-service-E2E.EMEA-Prod: +- name: CD_charging-sessions-service E2E +- tag: charging-sessions-service +- mzId: CD_charging-sessions-service/management-zone/CDcharging-sessions-service.id +- env: E2E +- skipDeployment: "false" +CDcharging-sessions-service-E2E.NA-Prod: +- name: CD_charging-sessions-service E2E +- tag: charging-sessions-service +- mzId: CD_charging-sessions-service/management-zone/CDcharging-sessions-service.id +- env: E2E +- skipDeployment: "false" +CDcharging-sessions-service-E2E.CN-Prod: +- name: CD_charging-sessions-service E2E +- tag: charging-sessions-service +- mzId: CD_charging-sessions-service/management-zone/CDcharging-sessions-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-sessions-service-INT: +- name: CD_charging-sessions-service INT +- tag: charging-sessions-service +- mzId: CD_charging-sessions-service/management-zone/CDcharging-sessions-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDcharging-sessions-service-INT.EMEA-PreProd: +- name: CD_charging-sessions-service INT +- tag: charging-sessions-service +- mzId: CD_charging-sessions-service/management-zone/CDcharging-sessions-service.id +- env: INT +- skipDeployment: "false" +CDcharging-sessions-service-INT.NA-PreProd: +- name: CD_charging-sessions-service INT +- tag: charging-sessions-service +- mzId: CD_charging-sessions-service/management-zone/CDcharging-sessions-service.id +- env: INT +- skipDeployment: "false" +CDcharging-sessions-service-INT.CN-PreProd: +- name: CD_charging-sessions-service INT +- tag: charging-sessions-service +- mzId: CD_charging-sessions-service/management-zone/CDcharging-sessions-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-sessions-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_charging-sessions-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-sessions-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-sessions-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_charging-sessions-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-sessions-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-sessions-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_charging-sessions-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-sessions-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-sessions-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_charging-sessions-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-sessions-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-sessions-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_charging-sessions-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-sessions-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-sessions-service/dashboard/README.md b/BMW-Dynatrace-config/CD_charging-sessions-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-sessions-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-sessions-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_charging-sessions-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..be421620 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-sessions-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDcharging-sessions-service-PROD-E2E: defaultPRODE2E.json +- CDcharging-sessions-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDcharging-sessions-service-PROD-E2E: +- name: CD_charging-sessions-service PROD +- mzName: CD_charging-sessions-service/management-zone/CDcharging-sessions-service.name +- mzId: CD_charging-sessions-service/management-zone/CDcharging-sessions-service.id +- skipDeployment: "true" +#Configuration +CDcharging-sessions-service-PROD-E2E.EMEA-Prod: +- name: CD_charging-sessions-service PROD +- mzName: CD_charging-sessions-service/management-zone/CDcharging-sessions-service.name +- mzId: CD_charging-sessions-service/management-zone/CDcharging-sessions-service.id +- tag: charging-sessions-service +- skipDeployment: "false" +CDcharging-sessions-service-PROD-E2E.NA-Prod: +- name: CD_charging-sessions-service PROD +- mzName: CD_charging-sessions-service/management-zone/CDcharging-sessions-service.name +- mzId: CD_charging-sessions-service/management-zone/CDcharging-sessions-service.id +- tag: charging-sessions-service +- skipDeployment: "false" +CDcharging-sessions-service-PROD-E2E.CN-Prod: +- name: CD_charging-sessions-service PROD +- mzName: CD_charging-sessions-service/management-zone/CDcharging-sessions-service.name +- mzId: CD_charging-sessions-service/management-zone/CDcharging-sessions-service.id +- tag: charging-sessions-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDcharging-sessions-service-INT-TEST: +- name: CD_charging-sessions-service INT-TEST +- mzName: CD_charging-sessions-service/management-zone/CDcharging-sessions-service.name +- mzId: CD_charging-sessions-service/management-zone/CDcharging-sessions-service.id +- tag: charging-sessions-service +- skipDeployment: "true" +#Configuration +CDcharging-sessions-service-INT-TEST.EMEA-PreProd: +- name: CD_charging-sessions-service INT-TEST +- mzName: CD_charging-sessions-service/management-zone/CDcharging-sessions-service.name +- mzId: CD_charging-sessions-service/management-zone/CDcharging-sessions-service.id +- tag: charging-sessions-service +- skipDeployment: "false" +CDcharging-sessions-service-INT-TEST.NA-PreProd: +- name: CD_charging-sessions-service INT-TEST +- mzName: CD_charging-sessions-service/management-zone/CDcharging-sessions-service.name +- mzId: CD_charging-sessions-service/management-zone/CDcharging-sessions-service.id +- env: INT +- skipDeployment: "false" +CDcharging-sessions-service-INT-TEST.CN-PreProd: +- name: CD_charging-sessions-service INT-TEST +- mzName: CD_charging-sessions-service/management-zone/CDcharging-sessions-service.name +- mzId: CD_charging-sessions-service/management-zone/CDcharging-sessions-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-sessions-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_charging-sessions-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-sessions-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-sessions-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_charging-sessions-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-sessions-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-sessions-service/management-zone/README.md b/BMW-Dynatrace-config/CD_charging-sessions-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-sessions-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_charging-sessions-service/management-zone/default.json b/BMW-Dynatrace-config/CD_charging-sessions-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-sessions-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-sessions-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_charging-sessions-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..61c80ecc --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-sessions-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDcharging-sessions-service: default.json + +CDcharging-sessions-service: +- name: CD_charging-sessions-service +- tag: charging-sessions-service diff --git a/BMW-Dynatrace-config/CD_charging-sessions-service/notification/README.md b/BMW-Dynatrace-config/CD_charging-sessions-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-sessions-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-sessions-service/notification/email.json b/BMW-Dynatrace-config/CD_charging-sessions-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-sessions-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-sessions-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_charging-sessions-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-sessions-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-sessions-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_charging-sessions-service/notification/notification.yaml new file mode 100644 index 00000000..23644270 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-sessions-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDcharging-sessions-service-PROD: msTeams.json +- CDcharging-sessions-service-E2E: msTeams.json +- CDcharging-sessions-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-sessions-service-PROD: +- name: CD_charging-sessions-service PROD +- alertingProfile: CD_charging-sessions-service/alerting-profile/CDcharging-sessions-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcharging-sessions-service-PROD.EMEA-Prod: +- name: CD_charging-sessions-service PROD +- alertingProfile: CD_charging-sessions-service/alerting-profile/CDcharging-sessions-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-sessions-service-PROD.NA-Prod: +- name: CD_charging-sessions-service PROD +- alertingProfile: CD_charging-sessions-service/alerting-profile/CDcharging-sessions-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-sessions-service-PROD.CN-Prod: +- name: CD_charging-sessions-service PROD +- alertingProfile: CD_charging-sessions-service/alerting-profile/CDcharging-sessions-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-sessions-service-E2E: +- name: CD_charging-sessions-service E2E +- alertingProfile: CD_charging-sessions-service/alerting-profile/CDcharging-sessions-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcharging-sessions-service-E2E.EMEA-Prod: +- name: CD_charging-sessions-service E2E +- alertingProfile: CD_charging-sessions-service/alerting-profile/CDcharging-sessions-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-sessions-service-E2E.NA-Prod: +- name: CD_charging-sessions-service E2E +- alertingProfile: CD_charging-sessions-service/alerting-profile/CDcharging-sessions-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-sessions-service-E2E.CN-Prod: +- name: CD_charging-sessions-service E2E +- alertingProfile: CD_charging-sessions-service/alerting-profile/CDcharging-sessions-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-sessions-service-INT: +- name: CD_charging-sessions-service INT +- alertingProfile: CD_charging-sessions-service/alerting-profile/CDcharging-sessions-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcharging-sessions-service-INT.EMEA-PreProd: +- name: CD_charging-sessions-service INT +- alertingProfile: CD_charging-sessions-service/alerting-profile/CDcharging-sessions-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-sessions-service-INT.NA-PreProd: +- name: CD_charging-sessions-service INT +- alertingProfile: CD_charging-sessions-service/alerting-profile/CDcharging-sessions-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-sessions-service-INT.CN-PreProd: +- name: CD_charging-sessions-service INT +- alertingProfile: CD_charging-sessions-service/alerting-profile/CDcharging-sessions-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-sessions-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_charging-sessions-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-sessions-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-sessions-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_charging-sessions-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-sessions-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-sessions-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_charging-sessions-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..e30cd033 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-sessions-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- charging-sessions-service: default.json + +charging-sessions-service: +- name: CD_charging-sessions-service - +- mzName: CD_charging-sessions-service/management-zone/CDcharging-sessions-service.name +- mzId: CD_charging-sessions-service/management-zone/CDcharging-sessions-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-stations-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_charging-stations-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..804acdfc --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-stations-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDcharging-stations-service-PROD: default.json +- CDcharging-stations-service-E2E: default.json +- CDcharging-stations-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-stations-service-PROD: +- name: CD_charging-stations-service PROD +- tag: charging-stations-service +- mzId: CD_charging-stations-service/management-zone/CDcharging-stations-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDcharging-stations-service-PROD.EMEA-Prod: +- name: CD_charging-stations-service PROD +- tag: charging-stations-service +- mzId: CD_charging-stations-service/management-zone/CDcharging-stations-service.id +- env: PROD +- skipDeployment: "false" +CDcharging-stations-service-PROD.NA-Prod: +- name: CD_charging-stations-service PROD +- tag: charging-stations-service +- mzId: CD_charging-stations-service/management-zone/CDcharging-stations-service.id +- env: PROD +- skipDeployment: "false" +CDcharging-stations-service-PROD.CN-Prod: +- name: CD_charging-stations-service PROD +- tag: charging-stations-service +- mzId: CD_charging-stations-service/management-zone/CDcharging-stations-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-stations-service-E2E: +- name: CD_charging-stations-service E2E +- tag: charging-stations-service +- mzId: CD_charging-stations-service/management-zone/CDcharging-stations-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDcharging-stations-service-E2E.EMEA-Prod: +- name: CD_charging-stations-service E2E +- tag: charging-stations-service +- mzId: CD_charging-stations-service/management-zone/CDcharging-stations-service.id +- env: E2E +- skipDeployment: "false" +CDcharging-stations-service-E2E.NA-Prod: +- name: CD_charging-stations-service E2E +- tag: charging-stations-service +- mzId: CD_charging-stations-service/management-zone/CDcharging-stations-service.id +- env: E2E +- skipDeployment: "false" +CDcharging-stations-service-E2E.CN-Prod: +- name: CD_charging-stations-service E2E +- tag: charging-stations-service +- mzId: CD_charging-stations-service/management-zone/CDcharging-stations-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-stations-service-INT: +- name: CD_charging-stations-service INT +- tag: charging-stations-service +- mzId: CD_charging-stations-service/management-zone/CDcharging-stations-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDcharging-stations-service-INT.EMEA-PreProd: +- name: CD_charging-stations-service INT +- tag: charging-stations-service +- mzId: CD_charging-stations-service/management-zone/CDcharging-stations-service.id +- env: INT +- skipDeployment: "false" +CDcharging-stations-service-INT.NA-PreProd: +- name: CD_charging-stations-service INT +- tag: charging-stations-service +- mzId: CD_charging-stations-service/management-zone/CDcharging-stations-service.id +- env: INT +- skipDeployment: "false" +CDcharging-stations-service-INT.CN-PreProd: +- name: CD_charging-stations-service INT +- tag: charging-stations-service +- mzId: CD_charging-stations-service/management-zone/CDcharging-stations-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-stations-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_charging-stations-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-stations-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-stations-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_charging-stations-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-stations-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-stations-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_charging-stations-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-stations-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-stations-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_charging-stations-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-stations-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-stations-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_charging-stations-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-stations-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-stations-service/dashboard/README.md b/BMW-Dynatrace-config/CD_charging-stations-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-stations-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-stations-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_charging-stations-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..4375ba0a --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-stations-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDcharging-stations-service-PROD-E2E: defaultPRODE2E.json +- CDcharging-stations-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDcharging-stations-service-PROD-E2E: +- name: CD_charging-stations-service PROD +- mzName: CD_charging-stations-service/management-zone/CDcharging-stations-service.name +- mzId: CD_charging-stations-service/management-zone/CDcharging-stations-service.id +- skipDeployment: "true" +#Configuration +CDcharging-stations-service-PROD-E2E.EMEA-Prod: +- name: CD_charging-stations-service PROD +- mzName: CD_charging-stations-service/management-zone/CDcharging-stations-service.name +- mzId: CD_charging-stations-service/management-zone/CDcharging-stations-service.id +- tag: charging-stations-service +- skipDeployment: "false" +CDcharging-stations-service-PROD-E2E.NA-Prod: +- name: CD_charging-stations-service PROD +- mzName: CD_charging-stations-service/management-zone/CDcharging-stations-service.name +- mzId: CD_charging-stations-service/management-zone/CDcharging-stations-service.id +- tag: charging-stations-service +- skipDeployment: "false" +CDcharging-stations-service-PROD-E2E.CN-Prod: +- name: CD_charging-stations-service PROD +- mzName: CD_charging-stations-service/management-zone/CDcharging-stations-service.name +- mzId: CD_charging-stations-service/management-zone/CDcharging-stations-service.id +- tag: charging-stations-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDcharging-stations-service-INT-TEST: +- name: CD_charging-stations-service INT-TEST +- mzName: CD_charging-stations-service/management-zone/CDcharging-stations-service.name +- mzId: CD_charging-stations-service/management-zone/CDcharging-stations-service.id +- tag: charging-stations-service +- skipDeployment: "true" +#Configuration +CDcharging-stations-service-INT-TEST.EMEA-PreProd: +- name: CD_charging-stations-service INT-TEST +- mzName: CD_charging-stations-service/management-zone/CDcharging-stations-service.name +- mzId: CD_charging-stations-service/management-zone/CDcharging-stations-service.id +- tag: charging-stations-service +- skipDeployment: "false" +CDcharging-stations-service-INT-TEST.NA-PreProd: +- name: CD_charging-stations-service INT-TEST +- mzName: CD_charging-stations-service/management-zone/CDcharging-stations-service.name +- mzId: CD_charging-stations-service/management-zone/CDcharging-stations-service.id +- env: INT +- skipDeployment: "false" +CDcharging-stations-service-INT-TEST.CN-PreProd: +- name: CD_charging-stations-service INT-TEST +- mzName: CD_charging-stations-service/management-zone/CDcharging-stations-service.name +- mzId: CD_charging-stations-service/management-zone/CDcharging-stations-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-stations-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_charging-stations-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-stations-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-stations-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_charging-stations-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-stations-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-stations-service/management-zone/README.md b/BMW-Dynatrace-config/CD_charging-stations-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-stations-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_charging-stations-service/management-zone/default.json b/BMW-Dynatrace-config/CD_charging-stations-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-stations-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-stations-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_charging-stations-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..3c2a2977 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-stations-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDcharging-stations-service: default.json + +CDcharging-stations-service: +- name: CD_charging-stations-service +- tag: charging-stations-service diff --git a/BMW-Dynatrace-config/CD_charging-stations-service/notification/README.md b/BMW-Dynatrace-config/CD_charging-stations-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-stations-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-stations-service/notification/email.json b/BMW-Dynatrace-config/CD_charging-stations-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-stations-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-stations-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_charging-stations-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-stations-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-stations-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_charging-stations-service/notification/notification.yaml new file mode 100644 index 00000000..7a8402cc --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-stations-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDcharging-stations-service-PROD: msTeams.json +- CDcharging-stations-service-E2E: msTeams.json +- CDcharging-stations-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-stations-service-PROD: +- name: CD_charging-stations-service PROD +- alertingProfile: CD_charging-stations-service/alerting-profile/CDcharging-stations-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcharging-stations-service-PROD.EMEA-Prod: +- name: CD_charging-stations-service PROD +- alertingProfile: CD_charging-stations-service/alerting-profile/CDcharging-stations-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-stations-service-PROD.NA-Prod: +- name: CD_charging-stations-service PROD +- alertingProfile: CD_charging-stations-service/alerting-profile/CDcharging-stations-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-stations-service-PROD.CN-Prod: +- name: CD_charging-stations-service PROD +- alertingProfile: CD_charging-stations-service/alerting-profile/CDcharging-stations-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-stations-service-E2E: +- name: CD_charging-stations-service E2E +- alertingProfile: CD_charging-stations-service/alerting-profile/CDcharging-stations-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcharging-stations-service-E2E.EMEA-Prod: +- name: CD_charging-stations-service E2E +- alertingProfile: CD_charging-stations-service/alerting-profile/CDcharging-stations-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-stations-service-E2E.NA-Prod: +- name: CD_charging-stations-service E2E +- alertingProfile: CD_charging-stations-service/alerting-profile/CDcharging-stations-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-stations-service-E2E.CN-Prod: +- name: CD_charging-stations-service E2E +- alertingProfile: CD_charging-stations-service/alerting-profile/CDcharging-stations-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcharging-stations-service-INT: +- name: CD_charging-stations-service INT +- alertingProfile: CD_charging-stations-service/alerting-profile/CDcharging-stations-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcharging-stations-service-INT.EMEA-PreProd: +- name: CD_charging-stations-service INT +- alertingProfile: CD_charging-stations-service/alerting-profile/CDcharging-stations-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-stations-service-INT.NA-PreProd: +- name: CD_charging-stations-service INT +- alertingProfile: CD_charging-stations-service/alerting-profile/CDcharging-stations-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDcharging-stations-service-INT.CN-PreProd: +- name: CD_charging-stations-service INT +- alertingProfile: CD_charging-stations-service/alerting-profile/CDcharging-stations-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-stations-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_charging-stations-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-stations-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-stations-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_charging-stations-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-stations-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-stations-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_charging-stations-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..d228a772 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-stations-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- charging-stations-service: default.json + +charging-stations-service: +- name: CD_charging-stations-service - +- mzName: CD_charging-stations-service/management-zone/CDcharging-stations-service.name +- mzId: CD_charging-stations-service/management-zone/CDcharging-stations-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..590c25be --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDclient-agent-telemetry-processor-PROD: default.json +- CDclient-agent-telemetry-processor-E2E: default.json +- CDclient-agent-telemetry-processor-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDclient-agent-telemetry-processor-PROD: +- name: CD_client-agent-telemetry-processor PROD +- tag: client-agent-telemetry-processor +- mzId: CD_client-agent-telemetry-processor/management-zone/CDclient-agent-telemetry-processor.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDclient-agent-telemetry-processor-PROD.EMEA-Prod: +- name: CD_client-agent-telemetry-processor PROD +- tag: client-agent-telemetry-processor +- mzId: CD_client-agent-telemetry-processor/management-zone/CDclient-agent-telemetry-processor.id +- env: PROD +- skipDeployment: "false" +CDclient-agent-telemetry-processor-PROD.NA-Prod: +- name: CD_client-agent-telemetry-processor PROD +- tag: client-agent-telemetry-processor +- mzId: CD_client-agent-telemetry-processor/management-zone/CDclient-agent-telemetry-processor.id +- env: PROD +- skipDeployment: "false" +CDclient-agent-telemetry-processor-PROD.CN-Prod: +- name: CD_client-agent-telemetry-processor PROD +- tag: client-agent-telemetry-processor +- mzId: CD_client-agent-telemetry-processor/management-zone/CDclient-agent-telemetry-processor.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDclient-agent-telemetry-processor-E2E: +- name: CD_client-agent-telemetry-processor E2E +- tag: client-agent-telemetry-processor +- mzId: CD_client-agent-telemetry-processor/management-zone/CDclient-agent-telemetry-processor.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDclient-agent-telemetry-processor-E2E.EMEA-Prod: +- name: CD_client-agent-telemetry-processor E2E +- tag: client-agent-telemetry-processor +- mzId: CD_client-agent-telemetry-processor/management-zone/CDclient-agent-telemetry-processor.id +- env: E2E +- skipDeployment: "false" +CDclient-agent-telemetry-processor-E2E.NA-Prod: +- name: CD_client-agent-telemetry-processor E2E +- tag: client-agent-telemetry-processor +- mzId: CD_client-agent-telemetry-processor/management-zone/CDclient-agent-telemetry-processor.id +- env: E2E +- skipDeployment: "false" +CDclient-agent-telemetry-processor-E2E.CN-Prod: +- name: CD_client-agent-telemetry-processor E2E +- tag: client-agent-telemetry-processor +- mzId: CD_client-agent-telemetry-processor/management-zone/CDclient-agent-telemetry-processor.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDclient-agent-telemetry-processor-INT: +- name: CD_client-agent-telemetry-processor INT +- tag: client-agent-telemetry-processor +- mzId: CD_client-agent-telemetry-processor/management-zone/CDclient-agent-telemetry-processor.id +- env: INT +- skipDeployment: "true" +#Configuration +CDclient-agent-telemetry-processor-INT.EMEA-PreProd: +- name: CD_client-agent-telemetry-processor INT +- tag: client-agent-telemetry-processor +- mzId: CD_client-agent-telemetry-processor/management-zone/CDclient-agent-telemetry-processor.id +- env: INT +- skipDeployment: "false" +CDclient-agent-telemetry-processor-INT.NA-PreProd: +- name: CD_client-agent-telemetry-processor INT +- tag: client-agent-telemetry-processor +- mzId: CD_client-agent-telemetry-processor/management-zone/CDclient-agent-telemetry-processor.id +- env: INT +- skipDeployment: "false" +CDclient-agent-telemetry-processor-INT.CN-PreProd: +- name: CD_client-agent-telemetry-processor INT +- tag: client-agent-telemetry-processor +- mzId: CD_client-agent-telemetry-processor/management-zone/CDclient-agent-telemetry-processor.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/alerting-profile/default.json b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/custom-service-java/README.md b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/dashboard/README.md b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/dashboard/dashboard.yaml new file mode 100644 index 00000000..3238c939 --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDclient-agent-telemetry-processor-PROD-E2E: defaultPRODE2E.json +- CDclient-agent-telemetry-processor-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDclient-agent-telemetry-processor-PROD-E2E: +- name: CD_client-agent-telemetry-processor PROD +- mzName: CD_client-agent-telemetry-processor/management-zone/CDclient-agent-telemetry-processor.name +- mzId: CD_client-agent-telemetry-processor/management-zone/CDclient-agent-telemetry-processor.id +- skipDeployment: "true" +#Configuration +CDclient-agent-telemetry-processor-PROD-E2E.EMEA-Prod: +- name: CD_client-agent-telemetry-processor PROD +- mzName: CD_client-agent-telemetry-processor/management-zone/CDclient-agent-telemetry-processor.name +- mzId: CD_client-agent-telemetry-processor/management-zone/CDclient-agent-telemetry-processor.id +- tag: client-agent-telemetry-processor +- skipDeployment: "false" +CDclient-agent-telemetry-processor-PROD-E2E.NA-Prod: +- name: CD_client-agent-telemetry-processor PROD +- mzName: CD_client-agent-telemetry-processor/management-zone/CDclient-agent-telemetry-processor.name +- mzId: CD_client-agent-telemetry-processor/management-zone/CDclient-agent-telemetry-processor.id +- tag: client-agent-telemetry-processor +- skipDeployment: "false" +CDclient-agent-telemetry-processor-PROD-E2E.CN-Prod: +- name: CD_client-agent-telemetry-processor PROD +- mzName: CD_client-agent-telemetry-processor/management-zone/CDclient-agent-telemetry-processor.name +- mzId: CD_client-agent-telemetry-processor/management-zone/CDclient-agent-telemetry-processor.id +- tag: client-agent-telemetry-processor +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDclient-agent-telemetry-processor-INT-TEST: +- name: CD_client-agent-telemetry-processor INT-TEST +- mzName: CD_client-agent-telemetry-processor/management-zone/CDclient-agent-telemetry-processor.name +- mzId: CD_client-agent-telemetry-processor/management-zone/CDclient-agent-telemetry-processor.id +- tag: client-agent-telemetry-processor +- skipDeployment: "true" +#Configuration +CDclient-agent-telemetry-processor-INT-TEST.EMEA-PreProd: +- name: CD_client-agent-telemetry-processor INT-TEST +- mzName: CD_client-agent-telemetry-processor/management-zone/CDclient-agent-telemetry-processor.name +- mzId: CD_client-agent-telemetry-processor/management-zone/CDclient-agent-telemetry-processor.id +- tag: client-agent-telemetry-processor +- skipDeployment: "false" +CDclient-agent-telemetry-processor-INT-TEST.NA-PreProd: +- name: CD_client-agent-telemetry-processor INT-TEST +- mzName: CD_client-agent-telemetry-processor/management-zone/CDclient-agent-telemetry-processor.name +- mzId: CD_client-agent-telemetry-processor/management-zone/CDclient-agent-telemetry-processor.id +- env: INT +- skipDeployment: "false" +CDclient-agent-telemetry-processor-INT-TEST.CN-PreProd: +- name: CD_client-agent-telemetry-processor INT-TEST +- mzName: CD_client-agent-telemetry-processor/management-zone/CDclient-agent-telemetry-processor.name +- mzId: CD_client-agent-telemetry-processor/management-zone/CDclient-agent-telemetry-processor.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/management-zone/README.md b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/management-zone/default.json b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/management-zone/management-zone.yaml new file mode 100644 index 00000000..cfd07e4c --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDclient-agent-telemetry-processor: default.json + +CDclient-agent-telemetry-processor: +- name: CD_client-agent-telemetry-processor +- tag: client-agent-telemetry-processor diff --git a/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/notification/README.md b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/notification/email.json b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/notification/msTeams.json b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/notification/notification.yaml b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/notification/notification.yaml new file mode 100644 index 00000000..f1a2fa9f --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDclient-agent-telemetry-processor-PROD: msTeams.json +- CDclient-agent-telemetry-processor-E2E: msTeams.json +- CDclient-agent-telemetry-processor-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDclient-agent-telemetry-processor-PROD: +- name: CD_client-agent-telemetry-processor PROD +- alertingProfile: CD_client-agent-telemetry-processor/alerting-profile/CDclient-agent-telemetry-processor-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDclient-agent-telemetry-processor-PROD.EMEA-Prod: +- name: CD_client-agent-telemetry-processor PROD +- alertingProfile: CD_client-agent-telemetry-processor/alerting-profile/CDclient-agent-telemetry-processor-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDclient-agent-telemetry-processor-PROD.NA-Prod: +- name: CD_client-agent-telemetry-processor PROD +- alertingProfile: CD_client-agent-telemetry-processor/alerting-profile/CDclient-agent-telemetry-processor-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDclient-agent-telemetry-processor-PROD.CN-Prod: +- name: CD_client-agent-telemetry-processor PROD +- alertingProfile: CD_client-agent-telemetry-processor/alerting-profile/CDclient-agent-telemetry-processor-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDclient-agent-telemetry-processor-E2E: +- name: CD_client-agent-telemetry-processor E2E +- alertingProfile: CD_client-agent-telemetry-processor/alerting-profile/CDclient-agent-telemetry-processor-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDclient-agent-telemetry-processor-E2E.EMEA-Prod: +- name: CD_client-agent-telemetry-processor E2E +- alertingProfile: CD_client-agent-telemetry-processor/alerting-profile/CDclient-agent-telemetry-processor-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDclient-agent-telemetry-processor-E2E.NA-Prod: +- name: CD_client-agent-telemetry-processor E2E +- alertingProfile: CD_client-agent-telemetry-processor/alerting-profile/CDclient-agent-telemetry-processor-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDclient-agent-telemetry-processor-E2E.CN-Prod: +- name: CD_client-agent-telemetry-processor E2E +- alertingProfile: CD_client-agent-telemetry-processor/alerting-profile/CDclient-agent-telemetry-processor-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDclient-agent-telemetry-processor-INT: +- name: CD_client-agent-telemetry-processor INT +- alertingProfile: CD_client-agent-telemetry-processor/alerting-profile/CDclient-agent-telemetry-processor-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDclient-agent-telemetry-processor-INT.EMEA-PreProd: +- name: CD_client-agent-telemetry-processor INT +- alertingProfile: CD_client-agent-telemetry-processor/alerting-profile/CDclient-agent-telemetry-processor-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDclient-agent-telemetry-processor-INT.NA-PreProd: +- name: CD_client-agent-telemetry-processor INT +- alertingProfile: CD_client-agent-telemetry-processor/alerting-profile/CDclient-agent-telemetry-processor-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDclient-agent-telemetry-processor-INT.CN-PreProd: +- name: CD_client-agent-telemetry-processor INT +- alertingProfile: CD_client-agent-telemetry-processor/alerting-profile/CDclient-agent-telemetry-processor-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..13eede76 --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- client-agent-telemetry-processor: default.json + +client-agent-telemetry-processor: +- name: CD_client-agent-telemetry-processor - +- mzName: CD_client-agent-telemetry-processor/management-zone/CDclient-agent-telemetry-processor.name +- mzId: CD_client-agent-telemetry-processor/management-zone/CDclient-agent-telemetry-processor.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/alerting-profile/alerting-profile.yaml index 39b98079..2b8ec942 100644 --- a/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/alerting-profile/alerting-profile.yaml +++ b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/alerting-profile/alerting-profile.yaml @@ -1,6 +1,88 @@ -CDclient-vehicle-telemetry-processor: -- name: CD_client-vehicle-telemetry-processor/management-zone/CDclient-vehicle-telemetry-processor.name +config: +- CDclient-vehicle-telemetry-processor-PROD: default.json +- CDclient-vehicle-telemetry-processor-E2E: default.json +- CDclient-vehicle-telemetry-processor-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDclient-vehicle-telemetry-processor-PROD: +- name: CD_client-vehicle-telemetry-processor PROD - tag: client-vehicle-telemetry-processor - mzId: CD_client-vehicle-telemetry-processor/management-zone/CDclient-vehicle-telemetry-processor.id -config: -- CDclient-vehicle-telemetry-processor: client-vehicle-telemetry-processor.json +- env: PROD +- skipDeployment: "true" +#Configuration +CDclient-vehicle-telemetry-processor-PROD.EMEA-Prod: +- name: CD_client-vehicle-telemetry-processor PROD +- tag: client-vehicle-telemetry-processor +- mzId: CD_client-vehicle-telemetry-processor/management-zone/CDclient-vehicle-telemetry-processor.id +- env: PROD +- skipDeployment: "false" +CDclient-vehicle-telemetry-processor-PROD.NA-Prod: +- name: CD_client-vehicle-telemetry-processor PROD +- tag: client-vehicle-telemetry-processor +- mzId: CD_client-vehicle-telemetry-processor/management-zone/CDclient-vehicle-telemetry-processor.id +- env: PROD +- skipDeployment: "false" +CDclient-vehicle-telemetry-processor-PROD.CN-Prod: +- name: CD_client-vehicle-telemetry-processor PROD +- tag: client-vehicle-telemetry-processor +- mzId: CD_client-vehicle-telemetry-processor/management-zone/CDclient-vehicle-telemetry-processor.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDclient-vehicle-telemetry-processor-E2E: +- name: CD_client-vehicle-telemetry-processor E2E +- tag: client-vehicle-telemetry-processor +- mzId: CD_client-vehicle-telemetry-processor/management-zone/CDclient-vehicle-telemetry-processor.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDclient-vehicle-telemetry-processor-E2E.EMEA-Prod: +- name: CD_client-vehicle-telemetry-processor E2E +- tag: client-vehicle-telemetry-processor +- mzId: CD_client-vehicle-telemetry-processor/management-zone/CDclient-vehicle-telemetry-processor.id +- env: E2E +- skipDeployment: "false" +CDclient-vehicle-telemetry-processor-E2E.NA-Prod: +- name: CD_client-vehicle-telemetry-processor E2E +- tag: client-vehicle-telemetry-processor +- mzId: CD_client-vehicle-telemetry-processor/management-zone/CDclient-vehicle-telemetry-processor.id +- env: E2E +- skipDeployment: "false" +CDclient-vehicle-telemetry-processor-E2E.CN-Prod: +- name: CD_client-vehicle-telemetry-processor E2E +- tag: client-vehicle-telemetry-processor +- mzId: CD_client-vehicle-telemetry-processor/management-zone/CDclient-vehicle-telemetry-processor.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDclient-vehicle-telemetry-processor-INT: +- name: CD_client-vehicle-telemetry-processor INT +- tag: client-vehicle-telemetry-processor +- mzId: CD_client-vehicle-telemetry-processor/management-zone/CDclient-vehicle-telemetry-processor.id +- env: INT +- skipDeployment: "true" +#Configuration +CDclient-vehicle-telemetry-processor-INT.EMEA-PreProd: +- name: CD_client-vehicle-telemetry-processor INT +- tag: client-vehicle-telemetry-processor +- mzId: CD_client-vehicle-telemetry-processor/management-zone/CDclient-vehicle-telemetry-processor.id +- env: INT +- skipDeployment: "false" +CDclient-vehicle-telemetry-processor-INT.NA-PreProd: +- name: CD_client-vehicle-telemetry-processor INT +- tag: client-vehicle-telemetry-processor +- mzId: CD_client-vehicle-telemetry-processor/management-zone/CDclient-vehicle-telemetry-processor.id +- env: INT +- skipDeployment: "false" +CDclient-vehicle-telemetry-processor-INT.CN-PreProd: +- name: CD_client-vehicle-telemetry-processor INT +- tag: client-vehicle-telemetry-processor +- mzId: CD_client-vehicle-telemetry-processor/management-zone/CDclient-vehicle-telemetry-processor.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/alerting-profile/default.json b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/custom-service-java/README.md b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/dashboard/README.md b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/dashboard/dashboard.yaml new file mode 100644 index 00000000..8ea064b1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDclient-vehicle-telemetry-processor-PROD-E2E: defaultPRODE2E.json +- CDclient-vehicle-telemetry-processor-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDclient-vehicle-telemetry-processor-PROD-E2E: +- name: CD_client-vehicle-telemetry-processor PROD +- mzName: CD_client-vehicle-telemetry-processor/management-zone/CDclient-vehicle-telemetry-processor.name +- mzId: CD_client-vehicle-telemetry-processor/management-zone/CDclient-vehicle-telemetry-processor.id +- skipDeployment: "true" +#Configuration +CDclient-vehicle-telemetry-processor-PROD-E2E.EMEA-Prod: +- name: CD_client-vehicle-telemetry-processor PROD +- mzName: CD_client-vehicle-telemetry-processor/management-zone/CDclient-vehicle-telemetry-processor.name +- mzId: CD_client-vehicle-telemetry-processor/management-zone/CDclient-vehicle-telemetry-processor.id +- tag: client-vehicle-telemetry-processor +- skipDeployment: "false" +CDclient-vehicle-telemetry-processor-PROD-E2E.NA-Prod: +- name: CD_client-vehicle-telemetry-processor PROD +- mzName: CD_client-vehicle-telemetry-processor/management-zone/CDclient-vehicle-telemetry-processor.name +- mzId: CD_client-vehicle-telemetry-processor/management-zone/CDclient-vehicle-telemetry-processor.id +- tag: client-vehicle-telemetry-processor +- skipDeployment: "false" +CDclient-vehicle-telemetry-processor-PROD-E2E.CN-Prod: +- name: CD_client-vehicle-telemetry-processor PROD +- mzName: CD_client-vehicle-telemetry-processor/management-zone/CDclient-vehicle-telemetry-processor.name +- mzId: CD_client-vehicle-telemetry-processor/management-zone/CDclient-vehicle-telemetry-processor.id +- tag: client-vehicle-telemetry-processor +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDclient-vehicle-telemetry-processor-INT-TEST: +- name: CD_client-vehicle-telemetry-processor INT-TEST +- mzName: CD_client-vehicle-telemetry-processor/management-zone/CDclient-vehicle-telemetry-processor.name +- mzId: CD_client-vehicle-telemetry-processor/management-zone/CDclient-vehicle-telemetry-processor.id +- tag: client-vehicle-telemetry-processor +- skipDeployment: "true" +#Configuration +CDclient-vehicle-telemetry-processor-INT-TEST.EMEA-PreProd: +- name: CD_client-vehicle-telemetry-processor INT-TEST +- mzName: CD_client-vehicle-telemetry-processor/management-zone/CDclient-vehicle-telemetry-processor.name +- mzId: CD_client-vehicle-telemetry-processor/management-zone/CDclient-vehicle-telemetry-processor.id +- tag: client-vehicle-telemetry-processor +- skipDeployment: "false" +CDclient-vehicle-telemetry-processor-INT-TEST.NA-PreProd: +- name: CD_client-vehicle-telemetry-processor INT-TEST +- mzName: CD_client-vehicle-telemetry-processor/management-zone/CDclient-vehicle-telemetry-processor.name +- mzId: CD_client-vehicle-telemetry-processor/management-zone/CDclient-vehicle-telemetry-processor.id +- env: INT +- skipDeployment: "false" +CDclient-vehicle-telemetry-processor-INT-TEST.CN-PreProd: +- name: CD_client-vehicle-telemetry-processor INT-TEST +- mzName: CD_client-vehicle-telemetry-processor/management-zone/CDclient-vehicle-telemetry-processor.name +- mzId: CD_client-vehicle-telemetry-processor/management-zone/CDclient-vehicle-telemetry-processor.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/management-zone/README.md b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/management-zone/default.json b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/management-zone/management-zone.yaml index c9664663..8b4d2e12 100644 --- a/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/management-zone/management-zone.yaml +++ b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/management-zone/management-zone.yaml @@ -1,20 +1,6 @@ -CDclient-vehicle-telemetry-processor.CN-PreProd: -- name: CD_client-vehicle-telemetry-processor -- tag: client-vehicle-telemetry-processor -CDclient-vehicle-telemetry-processor.CN-Prod: -- name: CD_client-vehicle-telemetry-processor -- tag: client-vehicle-telemetry-processor -CDclient-vehicle-telemetry-processor.EMEA-PreProd: -- name: CD_client-vehicle-telemetry-processor -- tag: client-vehicle-telemetry-processor -CDclient-vehicle-telemetry-processor.EMEA-Prod: -- name: CD_client-vehicle-telemetry-processor -- tag: client-vehicle-telemetry-processor -CDclient-vehicle-telemetry-processor.NA-PreProd: -- name: CD_client-vehicle-telemetry-processor -- tag: client-vehicle-telemetry-processor -CDclient-vehicle-telemetry-processor.NA-Prod: -- name: CD_client-vehicle-telemetry-processor -- tag: client-vehicle-telemetry-processor config: -- CDclient-vehicle-telemetry-processor: CDclient-vehicle-telemetry-processor.json +- CDclient-vehicle-telemetry-processor: default.json + +CDclient-vehicle-telemetry-processor: +- name: CD_client-vehicle-telemetry-processor +- tag: client-vehicle-telemetry-processor diff --git a/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/notification/README.md b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/notification/email.json b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/notification/msTeams.json b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/notification/notification.yaml b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/notification/notification.yaml new file mode 100644 index 00000000..7f4111e9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDclient-vehicle-telemetry-processor-PROD: msTeams.json +- CDclient-vehicle-telemetry-processor-E2E: msTeams.json +- CDclient-vehicle-telemetry-processor-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDclient-vehicle-telemetry-processor-PROD: +- name: CD_client-vehicle-telemetry-processor PROD +- alertingProfile: CD_client-vehicle-telemetry-processor/alerting-profile/CDclient-vehicle-telemetry-processor-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDclient-vehicle-telemetry-processor-PROD.EMEA-Prod: +- name: CD_client-vehicle-telemetry-processor PROD +- alertingProfile: CD_client-vehicle-telemetry-processor/alerting-profile/CDclient-vehicle-telemetry-processor-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDclient-vehicle-telemetry-processor-PROD.NA-Prod: +- name: CD_client-vehicle-telemetry-processor PROD +- alertingProfile: CD_client-vehicle-telemetry-processor/alerting-profile/CDclient-vehicle-telemetry-processor-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDclient-vehicle-telemetry-processor-PROD.CN-Prod: +- name: CD_client-vehicle-telemetry-processor PROD +- alertingProfile: CD_client-vehicle-telemetry-processor/alerting-profile/CDclient-vehicle-telemetry-processor-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDclient-vehicle-telemetry-processor-E2E: +- name: CD_client-vehicle-telemetry-processor E2E +- alertingProfile: CD_client-vehicle-telemetry-processor/alerting-profile/CDclient-vehicle-telemetry-processor-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDclient-vehicle-telemetry-processor-E2E.EMEA-Prod: +- name: CD_client-vehicle-telemetry-processor E2E +- alertingProfile: CD_client-vehicle-telemetry-processor/alerting-profile/CDclient-vehicle-telemetry-processor-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDclient-vehicle-telemetry-processor-E2E.NA-Prod: +- name: CD_client-vehicle-telemetry-processor E2E +- alertingProfile: CD_client-vehicle-telemetry-processor/alerting-profile/CDclient-vehicle-telemetry-processor-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDclient-vehicle-telemetry-processor-E2E.CN-Prod: +- name: CD_client-vehicle-telemetry-processor E2E +- alertingProfile: CD_client-vehicle-telemetry-processor/alerting-profile/CDclient-vehicle-telemetry-processor-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDclient-vehicle-telemetry-processor-INT: +- name: CD_client-vehicle-telemetry-processor INT +- alertingProfile: CD_client-vehicle-telemetry-processor/alerting-profile/CDclient-vehicle-telemetry-processor-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDclient-vehicle-telemetry-processor-INT.EMEA-PreProd: +- name: CD_client-vehicle-telemetry-processor INT +- alertingProfile: CD_client-vehicle-telemetry-processor/alerting-profile/CDclient-vehicle-telemetry-processor-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDclient-vehicle-telemetry-processor-INT.NA-PreProd: +- name: CD_client-vehicle-telemetry-processor INT +- alertingProfile: CD_client-vehicle-telemetry-processor/alerting-profile/CDclient-vehicle-telemetry-processor-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDclient-vehicle-telemetry-processor-INT.CN-PreProd: +- name: CD_client-vehicle-telemetry-processor INT +- alertingProfile: CD_client-vehicle-telemetry-processor/alerting-profile/CDclient-vehicle-telemetry-processor-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..7e1deab6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- client-vehicle-telemetry-processor: default.json + +client-vehicle-telemetry-processor: +- name: CD_client-vehicle-telemetry-processor - +- mzName: CD_client-vehicle-telemetry-processor/management-zone/CDclient-vehicle-telemetry-processor.name +- mzId: CD_client-vehicle-telemetry-processor/management-zone/CDclient-vehicle-telemetry-processor.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cm/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_cm/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..8a5636b9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cm/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDcm-PROD: default.json +- CDcm-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDcm-PROD: +- name: CD_cm PROD +- tag: cm +- mzId: CD_cm/management-zone/CDcm.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDcm-PROD.EMEA-Prod: +- name: CD_cm PROD +- tag: cm +- mzId: CD_cm/management-zone/CDcm.id +- env: PROD +- skipDeployment: "false" +CDcm-PROD.NA-Prod: +- name: CD_cm PROD +- tag: cm +- mzId: CD_cm/management-zone/CDcm.id +- env: PROD +- skipDeployment: "false" +CDcm-PROD.CN-Prod: +- name: CD_cm PROD +- tag: cm +- mzId: CD_cm/management-zone/CDcm.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDcm-INT: +- name: CD_cm INT +- tag: cm +- mzId: CD_cm/management-zone/CDcm.id +- env: INT +- skipDeployment: "true" +#Configuration +CDcm-INT.EMEA-PreProd: +- name: CD_cm INT +- tag: cm +- mzId: CD_cm/management-zone/CDcm.id +- env: INT +- skipDeployment: "false" +CDcm-INT.NA-PreProd: +- name: CD_cm INT +- tag: cm +- mzId: CD_cm/management-zone/CDcm.id +- env: INT +- skipDeployment: "false" +CDcm-INT.CN-PreProd: +- name: CD_cm INT +- tag: cm +- mzId: CD_cm/management-zone/CDcm.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cm/alerting-profile/default.json b/BMW-Dynatrace-config/CD_cm/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cm/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cm/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_cm/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_cm/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cm/custom-service-java/README.md b/BMW-Dynatrace-config/CD_cm/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cm/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cm/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_cm/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cm/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cm/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_cm/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cm/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cm/dashboard/README.md b/BMW-Dynatrace-config/CD_cm/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_cm/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cm/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_cm/dashboard/dashboard.yaml new file mode 100644 index 00000000..fcad946d --- /dev/null +++ b/BMW-Dynatrace-config/CD_cm/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDcm-PROD-E2E: defaultPRODE2E.json +- CDcm-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDcm-PROD-E2E: +- name: CD_cm PROD-E2E +- mzName: CD_cm/management-zone/CDcm.name +- mzId: CD_cm/management-zone/CDcm.id +- skipDeployment: "true" +#Configuration +CDcm-PROD-E2E.EMEA-Prod: +- name: CD_cm PROD-E2E +- mzName: CD_cm/management-zone/CDcm.name +- mzId: CD_cm/management-zone/CDcm.id +- tag: cm +- skipDeployment: "false" +CDcm-PROD-E2E.NA-Prod: +- name: CD_cm PROD-E2E +- mzName: CD_cm/management-zone/CDcm.name +- mzId: CD_cm/management-zone/CDcm.id +- tag: cm +- skipDeployment: "false" +CDcm-PROD-E2E.CN-Prod: +- name: CD_cm PROD-E2E +- mzName: CD_cm/management-zone/CDcm.name +- mzId: CD_cm/management-zone/CDcm.id +- tag: cm +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDcm-INT-TEST: +- name: CD_cm INT-TEST +- mzName: CD_cm/management-zone/CDcm.name +- mzId: CD_cm/management-zone/CDcm.id +- tag: cm +- skipDeployment: "true" +#Configuration +CDcm-INT-TEST.EMEA-PreProd: +- name: CD_cm INT-TEST +- mzName: CD_cm/management-zone/CDcm.name +- mzId: CD_cm/management-zone/CDcm.id +- tag: cm +- skipDeployment: "false" +CDcm-INT-TEST.NA-PreProd: +- name: CD_cm INT-TEST +- mzName: CD_cm/management-zone/CDcm.name +- mzId: CD_cm/management-zone/CDcm.id +- env: INT +- skipDeployment: "false" +CDcm-INT-TEST.CN-PreProd: +- name: CD_cm INT-TEST +- mzName: CD_cm/management-zone/CDcm.name +- mzId: CD_cm/management-zone/CDcm.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cm/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_cm/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cm/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cm/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_cm/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cm/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cm/management-zone/README.md b/BMW-Dynatrace-config/CD_cm/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cm/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_cm/management-zone/default.json b/BMW-Dynatrace-config/CD_cm/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_cm/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cm/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_cm/management-zone/management-zone.yaml new file mode 100644 index 00000000..53c99f38 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cm/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDcm: default.json + +CDcm: +- name: CD_cm +- tag: cm diff --git a/BMW-Dynatrace-config/CD_cm/notification/README.md b/BMW-Dynatrace-config/CD_cm/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cm/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cm/notification/email.json b/BMW-Dynatrace-config/CD_cm/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cm/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cm/notification/msTeams.json b/BMW-Dynatrace-config/CD_cm/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cm/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cm/notification/notification.yaml b/BMW-Dynatrace-config/CD_cm/notification/notification.yaml new file mode 100644 index 00000000..6ec70900 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cm/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDcm-PROD: msTeams.json +- CDcm-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcm-PROD: +- name: CD_cm PROD +- alertingProfile: CD_cm/alerting-profile/CDcm-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcm-PROD.EMEA-Prod: +- name: CD_cm PROD +- alertingProfile: CD_cm/alerting-profile/CDcm-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDcm-PROD.NA-Prod: +- name: CD_cm PROD +- alertingProfile: CD_cm/alerting-profile/CDcm-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDcm-PROD.CN-Prod: +- name: CD_cm PROD +- alertingProfile: CD_cm/alerting-profile/CDcm-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcm-INT: +- name: CD_cm INT +- alertingProfile: CD_cm/alerting-profile/CDcm-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcm-INT.EMEA-PreProd: +- name: CD_cm INT +- alertingProfile: CD_cm/alerting-profile/CDcm-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDcm-INT.NA-PreProd: +- name: CD_cm INT +- alertingProfile: CD_cm/alerting-profile/CDcm-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDcm-INT.CN-PreProd: +- name: CD_cm INT +- alertingProfile: CD_cm/alerting-profile/CDcm-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cm/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_cm/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_cm/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cm/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_cm/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_cm/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cm/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_cm/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..d4cf9cea --- /dev/null +++ b/BMW-Dynatrace-config/CD_cm/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- cm: default.json + +cm: +- name: CD_cm - +- mzName: CD_cm/management-zone/CDcm.name +- mzId: CD_cm/management-zone/CDcm.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-notification-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_commute-notification-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..dab92d6c --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-notification-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDcommute-notification-service-PROD: default.json +- CDcommute-notification-service-E2E: default.json +- CDcommute-notification-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcommute-notification-service-PROD: +- name: CD_commute-notification-service PROD +- tag: commute-notification-service +- mzId: CD_commute-notification-service/management-zone/CDcommute-notification-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDcommute-notification-service-PROD.EMEA-Prod: +- name: CD_commute-notification-service PROD +- tag: commute-notification-service +- mzId: CD_commute-notification-service/management-zone/CDcommute-notification-service.id +- env: PROD +- skipDeployment: "false" +CDcommute-notification-service-PROD.NA-Prod: +- name: CD_commute-notification-service PROD +- tag: commute-notification-service +- mzId: CD_commute-notification-service/management-zone/CDcommute-notification-service.id +- env: PROD +- skipDeployment: "false" +CDcommute-notification-service-PROD.CN-Prod: +- name: CD_commute-notification-service PROD +- tag: commute-notification-service +- mzId: CD_commute-notification-service/management-zone/CDcommute-notification-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcommute-notification-service-E2E: +- name: CD_commute-notification-service E2E +- tag: commute-notification-service +- mzId: CD_commute-notification-service/management-zone/CDcommute-notification-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDcommute-notification-service-E2E.EMEA-Prod: +- name: CD_commute-notification-service E2E +- tag: commute-notification-service +- mzId: CD_commute-notification-service/management-zone/CDcommute-notification-service.id +- env: E2E +- skipDeployment: "false" +CDcommute-notification-service-E2E.NA-Prod: +- name: CD_commute-notification-service E2E +- tag: commute-notification-service +- mzId: CD_commute-notification-service/management-zone/CDcommute-notification-service.id +- env: E2E +- skipDeployment: "false" +CDcommute-notification-service-E2E.CN-Prod: +- name: CD_commute-notification-service E2E +- tag: commute-notification-service +- mzId: CD_commute-notification-service/management-zone/CDcommute-notification-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcommute-notification-service-INT: +- name: CD_commute-notification-service INT +- tag: commute-notification-service +- mzId: CD_commute-notification-service/management-zone/CDcommute-notification-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDcommute-notification-service-INT.EMEA-PreProd: +- name: CD_commute-notification-service INT +- tag: commute-notification-service +- mzId: CD_commute-notification-service/management-zone/CDcommute-notification-service.id +- env: INT +- skipDeployment: "false" +CDcommute-notification-service-INT.NA-PreProd: +- name: CD_commute-notification-service INT +- tag: commute-notification-service +- mzId: CD_commute-notification-service/management-zone/CDcommute-notification-service.id +- env: INT +- skipDeployment: "false" +CDcommute-notification-service-INT.CN-PreProd: +- name: CD_commute-notification-service INT +- tag: commute-notification-service +- mzId: CD_commute-notification-service/management-zone/CDcommute-notification-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-notification-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_commute-notification-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-notification-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-notification-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_commute-notification-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-notification-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-notification-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_commute-notification-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-notification-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-notification-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_commute-notification-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-notification-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-notification-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_commute-notification-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-notification-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-notification-service/dashboard/README.md b/BMW-Dynatrace-config/CD_commute-notification-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-notification-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-notification-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_commute-notification-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..5b0c5ca8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-notification-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDcommute-notification-service-PROD-E2E: defaultPRODE2E.json +- CDcommute-notification-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDcommute-notification-service-PROD-E2E: +- name: CD_commute-notification-service PROD +- mzName: CD_commute-notification-service/management-zone/CDcommute-notification-service.name +- mzId: CD_commute-notification-service/management-zone/CDcommute-notification-service.id +- skipDeployment: "true" +#Configuration +CDcommute-notification-service-PROD-E2E.EMEA-Prod: +- name: CD_commute-notification-service PROD +- mzName: CD_commute-notification-service/management-zone/CDcommute-notification-service.name +- mzId: CD_commute-notification-service/management-zone/CDcommute-notification-service.id +- tag: commute-notification-service +- skipDeployment: "false" +CDcommute-notification-service-PROD-E2E.NA-Prod: +- name: CD_commute-notification-service PROD +- mzName: CD_commute-notification-service/management-zone/CDcommute-notification-service.name +- mzId: CD_commute-notification-service/management-zone/CDcommute-notification-service.id +- tag: commute-notification-service +- skipDeployment: "false" +CDcommute-notification-service-PROD-E2E.CN-Prod: +- name: CD_commute-notification-service PROD +- mzName: CD_commute-notification-service/management-zone/CDcommute-notification-service.name +- mzId: CD_commute-notification-service/management-zone/CDcommute-notification-service.id +- tag: commute-notification-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDcommute-notification-service-INT-TEST: +- name: CD_commute-notification-service INT-TEST +- mzName: CD_commute-notification-service/management-zone/CDcommute-notification-service.name +- mzId: CD_commute-notification-service/management-zone/CDcommute-notification-service.id +- tag: commute-notification-service +- skipDeployment: "true" +#Configuration +CDcommute-notification-service-INT-TEST.EMEA-PreProd: +- name: CD_commute-notification-service INT-TEST +- mzName: CD_commute-notification-service/management-zone/CDcommute-notification-service.name +- mzId: CD_commute-notification-service/management-zone/CDcommute-notification-service.id +- tag: commute-notification-service +- skipDeployment: "false" +CDcommute-notification-service-INT-TEST.NA-PreProd: +- name: CD_commute-notification-service INT-TEST +- mzName: CD_commute-notification-service/management-zone/CDcommute-notification-service.name +- mzId: CD_commute-notification-service/management-zone/CDcommute-notification-service.id +- env: INT +- skipDeployment: "false" +CDcommute-notification-service-INT-TEST.CN-PreProd: +- name: CD_commute-notification-service INT-TEST +- mzName: CD_commute-notification-service/management-zone/CDcommute-notification-service.name +- mzId: CD_commute-notification-service/management-zone/CDcommute-notification-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-notification-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_commute-notification-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-notification-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-notification-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_commute-notification-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-notification-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-notification-service/management-zone/README.md b/BMW-Dynatrace-config/CD_commute-notification-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-notification-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_commute-notification-service/management-zone/default.json b/BMW-Dynatrace-config/CD_commute-notification-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-notification-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-notification-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_commute-notification-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..bcd83e06 --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-notification-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDcommute-notification-service: default.json + +CDcommute-notification-service: +- name: CD_commute-notification-service +- tag: commute-notification-service diff --git a/BMW-Dynatrace-config/CD_commute-notification-service/notification/README.md b/BMW-Dynatrace-config/CD_commute-notification-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-notification-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-notification-service/notification/email.json b/BMW-Dynatrace-config/CD_commute-notification-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-notification-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-notification-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_commute-notification-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-notification-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-notification-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_commute-notification-service/notification/notification.yaml new file mode 100644 index 00000000..7c9a5c97 --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-notification-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDcommute-notification-service-PROD: msTeams.json +- CDcommute-notification-service-E2E: msTeams.json +- CDcommute-notification-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcommute-notification-service-PROD: +- name: CD_commute-notification-service PROD +- alertingProfile: CD_commute-notification-service/alerting-profile/CDcommute-notification-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcommute-notification-service-PROD.EMEA-Prod: +- name: CD_commute-notification-service PROD +- alertingProfile: CD_commute-notification-service/alerting-profile/CDcommute-notification-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDcommute-notification-service-PROD.NA-Prod: +- name: CD_commute-notification-service PROD +- alertingProfile: CD_commute-notification-service/alerting-profile/CDcommute-notification-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDcommute-notification-service-PROD.CN-Prod: +- name: CD_commute-notification-service PROD +- alertingProfile: CD_commute-notification-service/alerting-profile/CDcommute-notification-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcommute-notification-service-E2E: +- name: CD_commute-notification-service E2E +- alertingProfile: CD_commute-notification-service/alerting-profile/CDcommute-notification-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcommute-notification-service-E2E.EMEA-Prod: +- name: CD_commute-notification-service E2E +- alertingProfile: CD_commute-notification-service/alerting-profile/CDcommute-notification-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDcommute-notification-service-E2E.NA-Prod: +- name: CD_commute-notification-service E2E +- alertingProfile: CD_commute-notification-service/alerting-profile/CDcommute-notification-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDcommute-notification-service-E2E.CN-Prod: +- name: CD_commute-notification-service E2E +- alertingProfile: CD_commute-notification-service/alerting-profile/CDcommute-notification-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcommute-notification-service-INT: +- name: CD_commute-notification-service INT +- alertingProfile: CD_commute-notification-service/alerting-profile/CDcommute-notification-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcommute-notification-service-INT.EMEA-PreProd: +- name: CD_commute-notification-service INT +- alertingProfile: CD_commute-notification-service/alerting-profile/CDcommute-notification-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDcommute-notification-service-INT.NA-PreProd: +- name: CD_commute-notification-service INT +- alertingProfile: CD_commute-notification-service/alerting-profile/CDcommute-notification-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDcommute-notification-service-INT.CN-PreProd: +- name: CD_commute-notification-service INT +- alertingProfile: CD_commute-notification-service/alerting-profile/CDcommute-notification-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-notification-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_commute-notification-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-notification-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-notification-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_commute-notification-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-notification-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-notification-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_commute-notification-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..80c5c704 --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-notification-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- commute-notification-service: default.json + +commute-notification-service: +- name: CD_commute-notification-service - +- mzName: CD_commute-notification-service/management-zone/CDcommute-notification-service.name +- mzId: CD_commute-notification-service/management-zone/CDcommute-notification-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_commute-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..bc077e99 --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDcommute-service-PROD: default.json +- CDcommute-service-E2E: default.json +- CDcommute-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcommute-service-PROD: +- name: CD_commute-service PROD +- tag: commute-service +- mzId: CD_commute-service/management-zone/CDcommute-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDcommute-service-PROD.EMEA-Prod: +- name: CD_commute-service PROD +- tag: commute-service +- mzId: CD_commute-service/management-zone/CDcommute-service.id +- env: PROD +- skipDeployment: "false" +CDcommute-service-PROD.NA-Prod: +- name: CD_commute-service PROD +- tag: commute-service +- mzId: CD_commute-service/management-zone/CDcommute-service.id +- env: PROD +- skipDeployment: "false" +CDcommute-service-PROD.CN-Prod: +- name: CD_commute-service PROD +- tag: commute-service +- mzId: CD_commute-service/management-zone/CDcommute-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcommute-service-E2E: +- name: CD_commute-service E2E +- tag: commute-service +- mzId: CD_commute-service/management-zone/CDcommute-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDcommute-service-E2E.EMEA-Prod: +- name: CD_commute-service E2E +- tag: commute-service +- mzId: CD_commute-service/management-zone/CDcommute-service.id +- env: E2E +- skipDeployment: "false" +CDcommute-service-E2E.NA-Prod: +- name: CD_commute-service E2E +- tag: commute-service +- mzId: CD_commute-service/management-zone/CDcommute-service.id +- env: E2E +- skipDeployment: "false" +CDcommute-service-E2E.CN-Prod: +- name: CD_commute-service E2E +- tag: commute-service +- mzId: CD_commute-service/management-zone/CDcommute-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcommute-service-INT: +- name: CD_commute-service INT +- tag: commute-service +- mzId: CD_commute-service/management-zone/CDcommute-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDcommute-service-INT.EMEA-PreProd: +- name: CD_commute-service INT +- tag: commute-service +- mzId: CD_commute-service/management-zone/CDcommute-service.id +- env: INT +- skipDeployment: "false" +CDcommute-service-INT.NA-PreProd: +- name: CD_commute-service INT +- tag: commute-service +- mzId: CD_commute-service/management-zone/CDcommute-service.id +- env: INT +- skipDeployment: "false" +CDcommute-service-INT.CN-PreProd: +- name: CD_commute-service INT +- tag: commute-service +- mzId: CD_commute-service/management-zone/CDcommute-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_commute-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_commute-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_commute-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_commute-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_commute-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-service/dashboard/README.md b/BMW-Dynatrace-config/CD_commute-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_commute-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..6c8883c8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDcommute-service-PROD-E2E: defaultPRODE2E.json +- CDcommute-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDcommute-service-PROD-E2E: +- name: CD_commute-service PROD +- mzName: CD_commute-service/management-zone/CDcommute-service.name +- mzId: CD_commute-service/management-zone/CDcommute-service.id +- skipDeployment: "true" +#Configuration +CDcommute-service-PROD-E2E.EMEA-Prod: +- name: CD_commute-service PROD +- mzName: CD_commute-service/management-zone/CDcommute-service.name +- mzId: CD_commute-service/management-zone/CDcommute-service.id +- tag: commute-service +- skipDeployment: "false" +CDcommute-service-PROD-E2E.NA-Prod: +- name: CD_commute-service PROD +- mzName: CD_commute-service/management-zone/CDcommute-service.name +- mzId: CD_commute-service/management-zone/CDcommute-service.id +- tag: commute-service +- skipDeployment: "false" +CDcommute-service-PROD-E2E.CN-Prod: +- name: CD_commute-service PROD +- mzName: CD_commute-service/management-zone/CDcommute-service.name +- mzId: CD_commute-service/management-zone/CDcommute-service.id +- tag: commute-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDcommute-service-INT-TEST: +- name: CD_commute-service INT-TEST +- mzName: CD_commute-service/management-zone/CDcommute-service.name +- mzId: CD_commute-service/management-zone/CDcommute-service.id +- tag: commute-service +- skipDeployment: "true" +#Configuration +CDcommute-service-INT-TEST.EMEA-PreProd: +- name: CD_commute-service INT-TEST +- mzName: CD_commute-service/management-zone/CDcommute-service.name +- mzId: CD_commute-service/management-zone/CDcommute-service.id +- tag: commute-service +- skipDeployment: "false" +CDcommute-service-INT-TEST.NA-PreProd: +- name: CD_commute-service INT-TEST +- mzName: CD_commute-service/management-zone/CDcommute-service.name +- mzId: CD_commute-service/management-zone/CDcommute-service.id +- env: INT +- skipDeployment: "false" +CDcommute-service-INT-TEST.CN-PreProd: +- name: CD_commute-service INT-TEST +- mzName: CD_commute-service/management-zone/CDcommute-service.name +- mzId: CD_commute-service/management-zone/CDcommute-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_commute-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_commute-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-service/management-zone/README.md b/BMW-Dynatrace-config/CD_commute-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_commute-service/management-zone/default.json b/BMW-Dynatrace-config/CD_commute-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_commute-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..9f1de163 --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDcommute-service: default.json + +CDcommute-service: +- name: CD_commute-service +- tag: commute-service diff --git a/BMW-Dynatrace-config/CD_commute-service/notification/README.md b/BMW-Dynatrace-config/CD_commute-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-service/notification/email.json b/BMW-Dynatrace-config/CD_commute-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_commute-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_commute-service/notification/notification.yaml new file mode 100644 index 00000000..ca240fe7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDcommute-service-PROD: msTeams.json +- CDcommute-service-E2E: msTeams.json +- CDcommute-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcommute-service-PROD: +- name: CD_commute-service PROD +- alertingProfile: CD_commute-service/alerting-profile/CDcommute-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcommute-service-PROD.EMEA-Prod: +- name: CD_commute-service PROD +- alertingProfile: CD_commute-service/alerting-profile/CDcommute-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDcommute-service-PROD.NA-Prod: +- name: CD_commute-service PROD +- alertingProfile: CD_commute-service/alerting-profile/CDcommute-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDcommute-service-PROD.CN-Prod: +- name: CD_commute-service PROD +- alertingProfile: CD_commute-service/alerting-profile/CDcommute-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcommute-service-E2E: +- name: CD_commute-service E2E +- alertingProfile: CD_commute-service/alerting-profile/CDcommute-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcommute-service-E2E.EMEA-Prod: +- name: CD_commute-service E2E +- alertingProfile: CD_commute-service/alerting-profile/CDcommute-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDcommute-service-E2E.NA-Prod: +- name: CD_commute-service E2E +- alertingProfile: CD_commute-service/alerting-profile/CDcommute-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDcommute-service-E2E.CN-Prod: +- name: CD_commute-service E2E +- alertingProfile: CD_commute-service/alerting-profile/CDcommute-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcommute-service-INT: +- name: CD_commute-service INT +- alertingProfile: CD_commute-service/alerting-profile/CDcommute-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcommute-service-INT.EMEA-PreProd: +- name: CD_commute-service INT +- alertingProfile: CD_commute-service/alerting-profile/CDcommute-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDcommute-service-INT.NA-PreProd: +- name: CD_commute-service INT +- alertingProfile: CD_commute-service/alerting-profile/CDcommute-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDcommute-service-INT.CN-PreProd: +- name: CD_commute-service INT +- alertingProfile: CD_commute-service/alerting-profile/CDcommute-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_commute-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_commute-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_commute-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..2ce10044 --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- commute-service: default.json + +commute-service: +- name: CD_commute-service - +- mzName: CD_commute-service/management-zone/CDcommute-service.name +- mzId: CD_commute-service/management-zone/CDcommute-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-oauth-service-apim/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..d8f07911 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDconnected-oauth-service-apim-PROD: default.json +- CDconnected-oauth-service-apim-E2E: default.json +- CDconnected-oauth-service-apim-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDconnected-oauth-service-apim-PROD: +- name: CD_connected-oauth-service-apim PROD +- tag: connected-oauth-service-apim +- mzId: CD_connected-oauth-service-apim/management-zone/CDconnected-oauth-service-apim.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDconnected-oauth-service-apim-PROD.EMEA-Prod: +- name: CD_connected-oauth-service-apim PROD +- tag: connected-oauth-service-apim +- mzId: CD_connected-oauth-service-apim/management-zone/CDconnected-oauth-service-apim.id +- env: PROD +- skipDeployment: "false" +CDconnected-oauth-service-apim-PROD.NA-Prod: +- name: CD_connected-oauth-service-apim PROD +- tag: connected-oauth-service-apim +- mzId: CD_connected-oauth-service-apim/management-zone/CDconnected-oauth-service-apim.id +- env: PROD +- skipDeployment: "false" +CDconnected-oauth-service-apim-PROD.CN-Prod: +- name: CD_connected-oauth-service-apim PROD +- tag: connected-oauth-service-apim +- mzId: CD_connected-oauth-service-apim/management-zone/CDconnected-oauth-service-apim.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDconnected-oauth-service-apim-E2E: +- name: CD_connected-oauth-service-apim E2E +- tag: connected-oauth-service-apim +- mzId: CD_connected-oauth-service-apim/management-zone/CDconnected-oauth-service-apim.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDconnected-oauth-service-apim-E2E.EMEA-Prod: +- name: CD_connected-oauth-service-apim E2E +- tag: connected-oauth-service-apim +- mzId: CD_connected-oauth-service-apim/management-zone/CDconnected-oauth-service-apim.id +- env: E2E +- skipDeployment: "false" +CDconnected-oauth-service-apim-E2E.NA-Prod: +- name: CD_connected-oauth-service-apim E2E +- tag: connected-oauth-service-apim +- mzId: CD_connected-oauth-service-apim/management-zone/CDconnected-oauth-service-apim.id +- env: E2E +- skipDeployment: "false" +CDconnected-oauth-service-apim-E2E.CN-Prod: +- name: CD_connected-oauth-service-apim E2E +- tag: connected-oauth-service-apim +- mzId: CD_connected-oauth-service-apim/management-zone/CDconnected-oauth-service-apim.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDconnected-oauth-service-apim-INT: +- name: CD_connected-oauth-service-apim INT +- tag: connected-oauth-service-apim +- mzId: CD_connected-oauth-service-apim/management-zone/CDconnected-oauth-service-apim.id +- env: INT +- skipDeployment: "true" +#Configuration +CDconnected-oauth-service-apim-INT.EMEA-PreProd: +- name: CD_connected-oauth-service-apim INT +- tag: connected-oauth-service-apim +- mzId: CD_connected-oauth-service-apim/management-zone/CDconnected-oauth-service-apim.id +- env: INT +- skipDeployment: "false" +CDconnected-oauth-service-apim-INT.NA-PreProd: +- name: CD_connected-oauth-service-apim INT +- tag: connected-oauth-service-apim +- mzId: CD_connected-oauth-service-apim/management-zone/CDconnected-oauth-service-apim.id +- env: INT +- skipDeployment: "false" +CDconnected-oauth-service-apim-INT.CN-PreProd: +- name: CD_connected-oauth-service-apim INT +- tag: connected-oauth-service-apim +- mzId: CD_connected-oauth-service-apim/management-zone/CDconnected-oauth-service-apim.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-oauth-service-apim/alerting-profile/default.json b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-oauth-service-apim/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-oauth-service-apim/custom-service-java/README.md b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-oauth-service-apim/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-oauth-service-apim/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-oauth-service-apim/dashboard/README.md b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-oauth-service-apim/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/dashboard/dashboard.yaml new file mode 100644 index 00000000..713d3448 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDconnected-oauth-service-apim-PROD-E2E: defaultPRODE2E.json +- CDconnected-oauth-service-apim-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDconnected-oauth-service-apim-PROD-E2E: +- name: CD_connected-oauth-service-apim PROD +- mzName: CD_connected-oauth-service-apim/management-zone/CDconnected-oauth-service-apim.name +- mzId: CD_connected-oauth-service-apim/management-zone/CDconnected-oauth-service-apim.id +- skipDeployment: "true" +#Configuration +CDconnected-oauth-service-apim-PROD-E2E.EMEA-Prod: +- name: CD_connected-oauth-service-apim PROD +- mzName: CD_connected-oauth-service-apim/management-zone/CDconnected-oauth-service-apim.name +- mzId: CD_connected-oauth-service-apim/management-zone/CDconnected-oauth-service-apim.id +- tag: connected-oauth-service-apim +- skipDeployment: "false" +CDconnected-oauth-service-apim-PROD-E2E.NA-Prod: +- name: CD_connected-oauth-service-apim PROD +- mzName: CD_connected-oauth-service-apim/management-zone/CDconnected-oauth-service-apim.name +- mzId: CD_connected-oauth-service-apim/management-zone/CDconnected-oauth-service-apim.id +- tag: connected-oauth-service-apim +- skipDeployment: "false" +CDconnected-oauth-service-apim-PROD-E2E.CN-Prod: +- name: CD_connected-oauth-service-apim PROD +- mzName: CD_connected-oauth-service-apim/management-zone/CDconnected-oauth-service-apim.name +- mzId: CD_connected-oauth-service-apim/management-zone/CDconnected-oauth-service-apim.id +- tag: connected-oauth-service-apim +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDconnected-oauth-service-apim-INT-TEST: +- name: CD_connected-oauth-service-apim INT-TEST +- mzName: CD_connected-oauth-service-apim/management-zone/CDconnected-oauth-service-apim.name +- mzId: CD_connected-oauth-service-apim/management-zone/CDconnected-oauth-service-apim.id +- tag: connected-oauth-service-apim +- skipDeployment: "true" +#Configuration +CDconnected-oauth-service-apim-INT-TEST.EMEA-PreProd: +- name: CD_connected-oauth-service-apim INT-TEST +- mzName: CD_connected-oauth-service-apim/management-zone/CDconnected-oauth-service-apim.name +- mzId: CD_connected-oauth-service-apim/management-zone/CDconnected-oauth-service-apim.id +- tag: connected-oauth-service-apim +- skipDeployment: "false" +CDconnected-oauth-service-apim-INT-TEST.NA-PreProd: +- name: CD_connected-oauth-service-apim INT-TEST +- mzName: CD_connected-oauth-service-apim/management-zone/CDconnected-oauth-service-apim.name +- mzId: CD_connected-oauth-service-apim/management-zone/CDconnected-oauth-service-apim.id +- env: INT +- skipDeployment: "false" +CDconnected-oauth-service-apim-INT-TEST.CN-PreProd: +- name: CD_connected-oauth-service-apim INT-TEST +- mzName: CD_connected-oauth-service-apim/management-zone/CDconnected-oauth-service-apim.name +- mzId: CD_connected-oauth-service-apim/management-zone/CDconnected-oauth-service-apim.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-oauth-service-apim/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-oauth-service-apim/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-oauth-service-apim/management-zone/README.md b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_connected-oauth-service-apim/management-zone/default.json b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-oauth-service-apim/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/management-zone/management-zone.yaml new file mode 100644 index 00000000..a75209bb --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDconnected-oauth-service-apim: default.json + +CDconnected-oauth-service-apim: +- name: CD_connected-oauth-service-apim +- tag: connected-oauth-service-apim diff --git a/BMW-Dynatrace-config/CD_connected-oauth-service-apim/notification/README.md b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-oauth-service-apim/notification/email.json b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-oauth-service-apim/notification/msTeams.json b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-oauth-service-apim/notification/notification.yaml b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/notification/notification.yaml new file mode 100644 index 00000000..e97aafa9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDconnected-oauth-service-apim-PROD: msTeams.json +- CDconnected-oauth-service-apim-E2E: msTeams.json +- CDconnected-oauth-service-apim-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDconnected-oauth-service-apim-PROD: +- name: CD_connected-oauth-service-apim PROD +- alertingProfile: CD_connected-oauth-service-apim/alerting-profile/CDconnected-oauth-service-apim-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDconnected-oauth-service-apim-PROD.EMEA-Prod: +- name: CD_connected-oauth-service-apim PROD +- alertingProfile: CD_connected-oauth-service-apim/alerting-profile/CDconnected-oauth-service-apim-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDconnected-oauth-service-apim-PROD.NA-Prod: +- name: CD_connected-oauth-service-apim PROD +- alertingProfile: CD_connected-oauth-service-apim/alerting-profile/CDconnected-oauth-service-apim-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDconnected-oauth-service-apim-PROD.CN-Prod: +- name: CD_connected-oauth-service-apim PROD +- alertingProfile: CD_connected-oauth-service-apim/alerting-profile/CDconnected-oauth-service-apim-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDconnected-oauth-service-apim-E2E: +- name: CD_connected-oauth-service-apim E2E +- alertingProfile: CD_connected-oauth-service-apim/alerting-profile/CDconnected-oauth-service-apim-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDconnected-oauth-service-apim-E2E.EMEA-Prod: +- name: CD_connected-oauth-service-apim E2E +- alertingProfile: CD_connected-oauth-service-apim/alerting-profile/CDconnected-oauth-service-apim-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDconnected-oauth-service-apim-E2E.NA-Prod: +- name: CD_connected-oauth-service-apim E2E +- alertingProfile: CD_connected-oauth-service-apim/alerting-profile/CDconnected-oauth-service-apim-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDconnected-oauth-service-apim-E2E.CN-Prod: +- name: CD_connected-oauth-service-apim E2E +- alertingProfile: CD_connected-oauth-service-apim/alerting-profile/CDconnected-oauth-service-apim-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDconnected-oauth-service-apim-INT: +- name: CD_connected-oauth-service-apim INT +- alertingProfile: CD_connected-oauth-service-apim/alerting-profile/CDconnected-oauth-service-apim-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDconnected-oauth-service-apim-INT.EMEA-PreProd: +- name: CD_connected-oauth-service-apim INT +- alertingProfile: CD_connected-oauth-service-apim/alerting-profile/CDconnected-oauth-service-apim-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDconnected-oauth-service-apim-INT.NA-PreProd: +- name: CD_connected-oauth-service-apim INT +- alertingProfile: CD_connected-oauth-service-apim/alerting-profile/CDconnected-oauth-service-apim-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDconnected-oauth-service-apim-INT.CN-PreProd: +- name: CD_connected-oauth-service-apim INT +- alertingProfile: CD_connected-oauth-service-apim/alerting-profile/CDconnected-oauth-service-apim-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-oauth-service-apim/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-oauth-service-apim/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-oauth-service-apim/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..6604121e --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- connected-oauth-service-apim: default.json + +connected-oauth-service-apim: +- name: CD_connected-oauth-service-apim - +- mzName: CD_connected-oauth-service-apim/management-zone/CDconnected-oauth-service-apim.name +- mzId: CD_connected-oauth-service-apim/management-zone/CDconnected-oauth-service-apim.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-oauth-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_connected-oauth-service/dashboard/dashboard.yaml index 495a68a2..3fc81fb5 100644 --- a/BMW-Dynatrace-config/CD_connected-oauth-service/dashboard/dashboard.yaml +++ b/BMW-Dynatrace-config/CD_connected-oauth-service/dashboard/dashboard.yaml @@ -5,25 +5,25 @@ config: #PROD-E2E dashboards for EMEA/NA/CN Prod #Dry-run needed for all hubs CDconnected-oauth-service-PROD-E2E: -- name: CD_connected-oauth-service PROD-E2E +- name: CD_connected-oauth-service PROD - mzName: CD_connected-oauth-service/management-zone/CDconnected-oauth-service.name - mzId: CD_connected-oauth-service/management-zone/CDconnected-oauth-service.id - skipDeployment: "true" #Configuration CDconnected-oauth-service-PROD-E2E.EMEA-Prod: -- name: CD_connected-oauth-service PROD-E2E +- name: CD_connected-oauth-service PROD - mzName: CD_connected-oauth-service/management-zone/CDconnected-oauth-service.name - mzId: CD_connected-oauth-service/management-zone/CDconnected-oauth-service.id - tag: connected-oauth-service - skipDeployment: "false" CDconnected-oauth-service-PROD-E2E.NA-Prod: -- name: CD_connected-oauth-service PROD-E2E +- name: CD_connected-oauth-service PROD - mzName: CD_connected-oauth-service/management-zone/CDconnected-oauth-service.name - mzId: CD_connected-oauth-service/management-zone/CDconnected-oauth-service.id - tag: connected-oauth-service - skipDeployment: "false" CDconnected-oauth-service-PROD-E2E.CN-Prod: -- name: CD_connected-oauth-service PROD-E2E +- name: CD_connected-oauth-service PROD - mzName: CD_connected-oauth-service/management-zone/CDconnected-oauth-service.name - mzId: CD_connected-oauth-service/management-zone/CDconnected-oauth-service.id - tag: connected-oauth-service diff --git a/BMW-Dynatrace-config/CD_connected-oauth-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_connected-oauth-service/dashboard/defaultPRODE2E.json index 3bc85568..dcfda83e 100644 --- a/BMW-Dynatrace-config/CD_connected-oauth-service/dashboard/defaultPRODE2E.json +++ b/BMW-Dynatrace-config/CD_connected-oauth-service/dashboard/defaultPRODE2E.json @@ -7,7 +7,7 @@ }, "dashboardMetadata": { "name": "{{.name}}", - "shared": false, + "shared": true, "owner": "Ignacio.Goldman@partner.bmwgroup.com", "dashboardFilter": { "managementZone": { @@ -25,7 +25,7 @@ "tileType": "CUSTOM_CHARTING", "configured": true, "bounds": { - "top": 380, + "top": 342, "left": 38, "width": 760, "height": 266 @@ -81,47 +81,15 @@ "tileType": "OPEN_PROBLEMS", "configured": true, "bounds": { - "top": 114, - "left": 1596, + "top": 76, + "left": 836, "width": 152, "height": 152 }, "tileFilter": {} }, { - "name": "", - "tileType": "SERVICES", - "configured": true, - "bounds": { - "top": 76, - "left": 1064, - "width": 228, - "height": 190 - }, - "tileFilter": {}, - "filterConfig": { - "type": "SERVICE", - "customName": "Services", - "defaultName": "Services", - "chartConfig": { - "legendShown": true, - "type": "TIMESERIES", - "series": [], - "resultMetadata": {} - }, - "filtersPerEntityType": { - "SERVICE": { - "AUTO_TAGS": [ - "Environment:E2E", - "Component:{{.tag}}" - ] - } - } - }, - "chartVisible": true - }, - { - "name": "Overall Health - PROD", + "name": "Overall Health", "tileType": "HEADER", "configured": true, "bounds": { @@ -137,118 +105,20 @@ "tileType": "MARKDOWN", "configured": true, "bounds": { - "top": 684, + "top": 646, "left": 38, - "width": 1520, + "width": 760, "height": 38 }, "tileFilter": {}, "markdown": "---\n" }, - { - "name": "Service1 - E2E", - "tileType": "HEADER", - "configured": true, - "bounds": { - "top": 722, - "left": 798, - "width": 760, - "height": 38 - }, - "tileFilter": {} - }, { "name": "Custom chart", "tileType": "CUSTOM_CHARTING", "configured": true, "bounds": { - "top": 760, - "left": 798, - "width": 760, - "height": 304 - }, - "tileFilter": {}, - "filterConfig": { - "type": "MIXED", - "customName": "Response time, Throughput 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:E2E" - ] - } - } - } - }, - { - "name": "Service1 - PROD", - "tileType": "HEADER", - "configured": true, - "bounds": { - "top": 722, - "left": 38, - "width": 760, - "height": 38 - }, - "tileFilter": {} - }, - { - "name": "Custom chart", - "tileType": "CUSTOM_CHARTING", - "configured": true, - "bounds": { - "top": 760, + "top": 684, "left": 38, "width": 760, "height": 304 @@ -317,62 +187,6 @@ } } }, - { - "name": "Custom chart", - "tileType": "CUSTOM_CHARTING", - "configured": true, - "bounds": { - "top": 380, - "left": 798, - "width": 760, - "height": 266 - }, - "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": 1595276148986, - "customColor": "#ef651f" - } - } - }, - "filtersPerEntityType": { - "SERVICE": { - "AUTO_TAGS": [ - "Environment:E2E" - ] - } - } - } - }, { "name": "Markdown", "tileType": "MARKDOWN", @@ -380,36 +194,12 @@ "bounds": { "top": 304, "left": 38, - "width": 1520, + "width": 760, "height": 38 }, "tileFilter": {}, "markdown": "---\n" }, - { - "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", - "tileType": "HEADER", - "configured": true, - "bounds": { - "top": 342, - "left": 798, - "width": 760, - "height": 38 - }, - "tileFilter": {} - }, - { - "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", - "tileType": "HEADER", - "configured": true, - "bounds": { - "top": 342, - "left": 38, - "width": 760, - "height": 38 - }, - "tileFilter": {} - }, { "name": "", "tileType": "DATABASES_OVERVIEW", @@ -434,51 +224,7 @@ "filtersPerEntityType": { "DATABASE": { "AUTO_TAGS": [ - "Component:{{.tag}}", - "Environment:PROD" - ] - } - } - }, - "chartVisible": true - }, - { - "name": "Overall Health - E2E", - "tileType": "HEADER", - "configured": true, - "bounds": { - "top": 38, - "left": 798, - "width": 760, - "height": 38 - }, - "tileFilter": {} - }, - { - "name": "", - "tileType": "DATABASES_OVERVIEW", - "configured": true, - "bounds": { - "top": 76, - "left": 1330, - "width": 228, - "height": 190 - }, - "tileFilter": {}, - "filterConfig": { - "type": "DATABASE", - "customName": "Databases", - "defaultName": "Databases", - "chartConfig": { - "legendShown": true, - "type": "TIMESERIES", - "series": [], - "resultMetadata": {} - }, - "filtersPerEntityType": { - "DATABASE": { - "AUTO_TAGS": [ - "Environment:E2E", + "Environment:PROD", "Component:{{.tag}}" ] } @@ -510,39 +256,7 @@ "filtersPerEntityType": { "SERVICE": { "AUTO_TAGS": [ - "Component:{{.tag}}", - "Environment:PROD" - ] - } - } - }, - "chartVisible": true - }, - { - "name": "", - "tileType": "HOSTS", - "configured": true, - "bounds": { - "top": 76, - "left": 798, - "width": 228, - "height": 190 - }, - "tileFilter": {}, - "filterConfig": { - "type": "HOST", - "customName": "Hosts", - "defaultName": "Hosts", - "chartConfig": { - "legendShown": true, - "type": "TIMESERIES", - "series": [], - "resultMetadata": {} - }, - "filtersPerEntityType": { - "HOST": { - "AUTO_TAGS": [ - "Environment:E2E", + "Environment:PROD", "Component:{{.tag}}" ] } @@ -574,8 +288,8 @@ "filtersPerEntityType": { "HOST": { "AUTO_TAGS": [ - "Component:{{.tag}}", - "Environment:PROD" + "Environment:PROD", + "Component:{{.tag}}" ] } } diff --git a/BMW-Dynatrace-config/CD_connected-oauth-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_connected-oauth-service/synthetic-monitor/README.md index 58273541..92e734fa 100644 --- a/BMW-Dynatrace-config/CD_connected-oauth-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_connected-oauth-service/synthetic-monitor/README.md @@ -2,8 +2,33 @@ To calculate the Availability KPI, a synthetic must be configured. -1. Modify the synthetic-monitor.yaml file, providing the endpoint that will be tested, and location where the synthetic will run. -2. Change the skipDeployment to false. +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + 3. Commit and pull request to merge the branch to the master: ``` git add diff --git a/BMW-Dynatrace-config/CD_connected-oauth-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_connected-oauth-service/synthetic-monitor/default.json index 7e91d5ba..cf83039b 100644 --- a/BMW-Dynatrace-config/CD_connected-oauth-service/synthetic-monitor/default.json +++ b/BMW-Dynatrace-config/CD_connected-oauth-service/synthetic-monitor/default.json @@ -19,17 +19,15 @@ } }, "automaticallyAssignedApps": [], - "createdFrom": "GUI", "enabled": true, - "entityId": "HTTP_CHECK-3A93AE1CD9A029F7", "frequencyMin": 1, "locations": [ - "SYNTHETIC_LOCATION-6A36EDD481FAEB5D" + "{{.location}}" ], "managementZones": [ { - "id": "-2133422980246552080", - "name": "CD_SMS-Gateway" + "id": "{{.mzId}}", + "name": "{{.mzName}}" } ], "manuallyAssignedApps": [], @@ -37,7 +35,7 @@ "requests": [ { "entityId": "HTTP_CHECK_STEP-0BA53EC80CD7EE5A", - "name": "SMS GW EMEA PROD", + "name": "{{.name}}", "sequenceNumber": 1 } ], @@ -62,16 +60,15 @@ } ] }, - "description": "SMS GW EMEA PROD", - "method": "POST", - "requestBody": "{\n \"sender\": \"CDE2EMonitoring\",\n \"msg\": \n [ \n {\"to\": \n [ \n {\n \"number\": 49151601XXXX\n \n }\n ],\n \"contentType\":\"text\",\n \"content\": \"Test SMS GW MONITORING\" \n \n }\n ]\n \n}", - "url": "https://smsgw-emea-prod.bmwgroup.net/sms/v1/message", + "description": "{{.name}}", + "method": "GET", + "url": "{{.endpoint}}", "validation": { "rules": [ { "passIfFound": true, "type": "httpStatusesList", - "value": "400" + "value": "200" } ], "rulesChaining": "or" diff --git a/BMW-Dynatrace-config/CD_connected-oauth-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_connected-oauth-service/synthetic-monitor/synthetic-monitor.yaml index 35fe7c99..3d6d471b 100644 --- a/BMW-Dynatrace-config/CD_connected-oauth-service/synthetic-monitor/synthetic-monitor.yaml +++ b/BMW-Dynatrace-config/CD_connected-oauth-service/synthetic-monitor/synthetic-monitor.yaml @@ -2,9 +2,9 @@ config: - connected-oauth-service: default.json connected-oauth-service: -- name: CD_connected-oauth-service - +- name: CD_connected-oauth-service - - mzName: CD_connected-oauth-service/management-zone/CDconnected-oauth-service.name - mzId: CD_connected-oauth-service/management-zone/CDconnected-oauth-service.id -- endpoint: +- endpoint: - location: - skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-onboard-composite-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..95c2a8ac --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDconnected-onboard-composite-service-PROD: default.json +- CDconnected-onboard-composite-service-E2E: default.json +- CDconnected-onboard-composite-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDconnected-onboard-composite-service-PROD: +- name: CD_connected-onboard-composite-service PROD +- tag: connected-onboard-composite-service +- mzId: CD_connected-onboard-composite-service/management-zone/CDconnected-onboard-composite-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDconnected-onboard-composite-service-PROD.EMEA-Prod: +- name: CD_connected-onboard-composite-service PROD +- tag: connected-onboard-composite-service +- mzId: CD_connected-onboard-composite-service/management-zone/CDconnected-onboard-composite-service.id +- env: PROD +- skipDeployment: "false" +CDconnected-onboard-composite-service-PROD.NA-Prod: +- name: CD_connected-onboard-composite-service PROD +- tag: connected-onboard-composite-service +- mzId: CD_connected-onboard-composite-service/management-zone/CDconnected-onboard-composite-service.id +- env: PROD +- skipDeployment: "false" +CDconnected-onboard-composite-service-PROD.CN-Prod: +- name: CD_connected-onboard-composite-service PROD +- tag: connected-onboard-composite-service +- mzId: CD_connected-onboard-composite-service/management-zone/CDconnected-onboard-composite-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDconnected-onboard-composite-service-E2E: +- name: CD_connected-onboard-composite-service E2E +- tag: connected-onboard-composite-service +- mzId: CD_connected-onboard-composite-service/management-zone/CDconnected-onboard-composite-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDconnected-onboard-composite-service-E2E.EMEA-Prod: +- name: CD_connected-onboard-composite-service E2E +- tag: connected-onboard-composite-service +- mzId: CD_connected-onboard-composite-service/management-zone/CDconnected-onboard-composite-service.id +- env: E2E +- skipDeployment: "false" +CDconnected-onboard-composite-service-E2E.NA-Prod: +- name: CD_connected-onboard-composite-service E2E +- tag: connected-onboard-composite-service +- mzId: CD_connected-onboard-composite-service/management-zone/CDconnected-onboard-composite-service.id +- env: E2E +- skipDeployment: "false" +CDconnected-onboard-composite-service-E2E.CN-Prod: +- name: CD_connected-onboard-composite-service E2E +- tag: connected-onboard-composite-service +- mzId: CD_connected-onboard-composite-service/management-zone/CDconnected-onboard-composite-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDconnected-onboard-composite-service-INT: +- name: CD_connected-onboard-composite-service INT +- tag: connected-onboard-composite-service +- mzId: CD_connected-onboard-composite-service/management-zone/CDconnected-onboard-composite-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDconnected-onboard-composite-service-INT.EMEA-PreProd: +- name: CD_connected-onboard-composite-service INT +- tag: connected-onboard-composite-service +- mzId: CD_connected-onboard-composite-service/management-zone/CDconnected-onboard-composite-service.id +- env: INT +- skipDeployment: "false" +CDconnected-onboard-composite-service-INT.NA-PreProd: +- name: CD_connected-onboard-composite-service INT +- tag: connected-onboard-composite-service +- mzId: CD_connected-onboard-composite-service/management-zone/CDconnected-onboard-composite-service.id +- env: INT +- skipDeployment: "false" +CDconnected-onboard-composite-service-INT.CN-PreProd: +- name: CD_connected-onboard-composite-service INT +- tag: connected-onboard-composite-service +- mzId: CD_connected-onboard-composite-service/management-zone/CDconnected-onboard-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-onboard-composite-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-onboard-composite-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-onboard-composite-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-onboard-composite-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-onboard-composite-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-onboard-composite-service/dashboard/README.md b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-onboard-composite-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..89275ccd --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDconnected-onboard-composite-service-PROD-E2E: defaultPRODE2E.json +- CDconnected-onboard-composite-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDconnected-onboard-composite-service-PROD-E2E: +- name: CD_connected-onboard-composite-service PROD +- mzName: CD_connected-onboard-composite-service/management-zone/CDconnected-onboard-composite-service.name +- mzId: CD_connected-onboard-composite-service/management-zone/CDconnected-onboard-composite-service.id +- skipDeployment: "true" +#Configuration +CDconnected-onboard-composite-service-PROD-E2E.EMEA-Prod: +- name: CD_connected-onboard-composite-service PROD +- mzName: CD_connected-onboard-composite-service/management-zone/CDconnected-onboard-composite-service.name +- mzId: CD_connected-onboard-composite-service/management-zone/CDconnected-onboard-composite-service.id +- tag: connected-onboard-composite-service +- skipDeployment: "false" +CDconnected-onboard-composite-service-PROD-E2E.NA-Prod: +- name: CD_connected-onboard-composite-service PROD +- mzName: CD_connected-onboard-composite-service/management-zone/CDconnected-onboard-composite-service.name +- mzId: CD_connected-onboard-composite-service/management-zone/CDconnected-onboard-composite-service.id +- tag: connected-onboard-composite-service +- skipDeployment: "false" +CDconnected-onboard-composite-service-PROD-E2E.CN-Prod: +- name: CD_connected-onboard-composite-service PROD +- mzName: CD_connected-onboard-composite-service/management-zone/CDconnected-onboard-composite-service.name +- mzId: CD_connected-onboard-composite-service/management-zone/CDconnected-onboard-composite-service.id +- tag: connected-onboard-composite-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDconnected-onboard-composite-service-INT-TEST: +- name: CD_connected-onboard-composite-service INT-TEST +- mzName: CD_connected-onboard-composite-service/management-zone/CDconnected-onboard-composite-service.name +- mzId: CD_connected-onboard-composite-service/management-zone/CDconnected-onboard-composite-service.id +- tag: connected-onboard-composite-service +- skipDeployment: "true" +#Configuration +CDconnected-onboard-composite-service-INT-TEST.EMEA-PreProd: +- name: CD_connected-onboard-composite-service INT-TEST +- mzName: CD_connected-onboard-composite-service/management-zone/CDconnected-onboard-composite-service.name +- mzId: CD_connected-onboard-composite-service/management-zone/CDconnected-onboard-composite-service.id +- tag: connected-onboard-composite-service +- skipDeployment: "false" +CDconnected-onboard-composite-service-INT-TEST.NA-PreProd: +- name: CD_connected-onboard-composite-service INT-TEST +- mzName: CD_connected-onboard-composite-service/management-zone/CDconnected-onboard-composite-service.name +- mzId: CD_connected-onboard-composite-service/management-zone/CDconnected-onboard-composite-service.id +- env: INT +- skipDeployment: "false" +CDconnected-onboard-composite-service-INT-TEST.CN-PreProd: +- name: CD_connected-onboard-composite-service INT-TEST +- mzName: CD_connected-onboard-composite-service/management-zone/CDconnected-onboard-composite-service.name +- mzId: CD_connected-onboard-composite-service/management-zone/CDconnected-onboard-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-onboard-composite-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-onboard-composite-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-onboard-composite-service/management-zone/README.md b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_connected-onboard-composite-service/management-zone/default.json b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-onboard-composite-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..91263d6e --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDconnected-onboard-composite-service: default.json + +CDconnected-onboard-composite-service: +- name: CD_connected-onboard-composite-service +- tag: connected-onboard-composite-service diff --git a/BMW-Dynatrace-config/CD_connected-onboard-composite-service/notification/README.md b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-onboard-composite-service/notification/email.json b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-onboard-composite-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-onboard-composite-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/notification/notification.yaml new file mode 100644 index 00000000..5221b139 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDconnected-onboard-composite-service-PROD: msTeams.json +- CDconnected-onboard-composite-service-E2E: msTeams.json +- CDconnected-onboard-composite-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDconnected-onboard-composite-service-PROD: +- name: CD_connected-onboard-composite-service PROD +- alertingProfile: CD_connected-onboard-composite-service/alerting-profile/CDconnected-onboard-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDconnected-onboard-composite-service-PROD.EMEA-Prod: +- name: CD_connected-onboard-composite-service PROD +- alertingProfile: CD_connected-onboard-composite-service/alerting-profile/CDconnected-onboard-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDconnected-onboard-composite-service-PROD.NA-Prod: +- name: CD_connected-onboard-composite-service PROD +- alertingProfile: CD_connected-onboard-composite-service/alerting-profile/CDconnected-onboard-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDconnected-onboard-composite-service-PROD.CN-Prod: +- name: CD_connected-onboard-composite-service PROD +- alertingProfile: CD_connected-onboard-composite-service/alerting-profile/CDconnected-onboard-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDconnected-onboard-composite-service-E2E: +- name: CD_connected-onboard-composite-service E2E +- alertingProfile: CD_connected-onboard-composite-service/alerting-profile/CDconnected-onboard-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDconnected-onboard-composite-service-E2E.EMEA-Prod: +- name: CD_connected-onboard-composite-service E2E +- alertingProfile: CD_connected-onboard-composite-service/alerting-profile/CDconnected-onboard-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDconnected-onboard-composite-service-E2E.NA-Prod: +- name: CD_connected-onboard-composite-service E2E +- alertingProfile: CD_connected-onboard-composite-service/alerting-profile/CDconnected-onboard-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDconnected-onboard-composite-service-E2E.CN-Prod: +- name: CD_connected-onboard-composite-service E2E +- alertingProfile: CD_connected-onboard-composite-service/alerting-profile/CDconnected-onboard-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDconnected-onboard-composite-service-INT: +- name: CD_connected-onboard-composite-service INT +- alertingProfile: CD_connected-onboard-composite-service/alerting-profile/CDconnected-onboard-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDconnected-onboard-composite-service-INT.EMEA-PreProd: +- name: CD_connected-onboard-composite-service INT +- alertingProfile: CD_connected-onboard-composite-service/alerting-profile/CDconnected-onboard-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDconnected-onboard-composite-service-INT.NA-PreProd: +- name: CD_connected-onboard-composite-service INT +- alertingProfile: CD_connected-onboard-composite-service/alerting-profile/CDconnected-onboard-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDconnected-onboard-composite-service-INT.CN-PreProd: +- name: CD_connected-onboard-composite-service INT +- alertingProfile: CD_connected-onboard-composite-service/alerting-profile/CDconnected-onboard-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-onboard-composite-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-onboard-composite-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-onboard-composite-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..5820bee6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- connected-onboard-composite-service: default.json + +connected-onboard-composite-service: +- name: CD_connected-onboard-composite-service - +- mzName: CD_connected-onboard-composite-service/management-zone/CDconnected-onboard-composite-service.name +- mzId: CD_connected-onboard-composite-service/management-zone/CDconnected-onboard-composite-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_csu/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_csu/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..5ceda0af --- /dev/null +++ b/BMW-Dynatrace-config/CD_csu/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDcsu-PROD: default.json +- CDcsu-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDcsu-PROD: +- name: CD_csu PROD +- tag: csu +- mzId: CD_csu/management-zone/CDcsu.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDcsu-PROD.EMEA-Prod: +- name: CD_csu PROD +- tag: csu +- mzId: CD_csu/management-zone/CDcsu.id +- env: PROD +- skipDeployment: "false" +CDcsu-PROD.NA-Prod: +- name: CD_csu PROD +- tag: csu +- mzId: CD_csu/management-zone/CDcsu.id +- env: PROD +- skipDeployment: "false" +CDcsu-PROD.CN-Prod: +- name: CD_csu PROD +- tag: csu +- mzId: CD_csu/management-zone/CDcsu.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDcsu-INT: +- name: CD_csu INT +- tag: csu +- mzId: CD_csu/management-zone/CDcsu.id +- env: INT +- skipDeployment: "true" +#Configuration +CDcsu-INT.EMEA-PreProd: +- name: CD_csu INT +- tag: csu +- mzId: CD_csu/management-zone/CDcsu.id +- env: INT +- skipDeployment: "false" +CDcsu-INT.NA-PreProd: +- name: CD_csu INT +- tag: csu +- mzId: CD_csu/management-zone/CDcsu.id +- env: INT +- skipDeployment: "false" +CDcsu-INT.CN-PreProd: +- name: CD_csu INT +- tag: csu +- mzId: CD_csu/management-zone/CDcsu.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_csu/alerting-profile/default.json b/BMW-Dynatrace-config/CD_csu/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_csu/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_csu/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_csu/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_csu/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_csu/custom-service-java/README.md b/BMW-Dynatrace-config/CD_csu/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_csu/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_csu/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_csu/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_csu/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_csu/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_csu/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_csu/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_csu/dashboard/README.md b/BMW-Dynatrace-config/CD_csu/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_csu/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_csu/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_csu/dashboard/dashboard.yaml new file mode 100644 index 00000000..10952b36 --- /dev/null +++ b/BMW-Dynatrace-config/CD_csu/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDcsu-PROD-E2E: defaultPRODE2E.json +- CDcsu-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDcsu-PROD-E2E: +- name: CD_csu PROD-E2E +- mzName: CD_csu/management-zone/CDcsu.name +- mzId: CD_csu/management-zone/CDcsu.id +- skipDeployment: "true" +#Configuration +CDcsu-PROD-E2E.EMEA-Prod: +- name: CD_csu PROD-E2E +- mzName: CD_csu/management-zone/CDcsu.name +- mzId: CD_csu/management-zone/CDcsu.id +- tag: csu +- skipDeployment: "false" +CDcsu-PROD-E2E.NA-Prod: +- name: CD_csu PROD-E2E +- mzName: CD_csu/management-zone/CDcsu.name +- mzId: CD_csu/management-zone/CDcsu.id +- tag: csu +- skipDeployment: "false" +CDcsu-PROD-E2E.CN-Prod: +- name: CD_csu PROD-E2E +- mzName: CD_csu/management-zone/CDcsu.name +- mzId: CD_csu/management-zone/CDcsu.id +- tag: csu +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDcsu-INT-TEST: +- name: CD_csu INT-TEST +- mzName: CD_csu/management-zone/CDcsu.name +- mzId: CD_csu/management-zone/CDcsu.id +- tag: csu +- skipDeployment: "true" +#Configuration +CDcsu-INT-TEST.EMEA-PreProd: +- name: CD_csu INT-TEST +- mzName: CD_csu/management-zone/CDcsu.name +- mzId: CD_csu/management-zone/CDcsu.id +- tag: csu +- skipDeployment: "false" +CDcsu-INT-TEST.NA-PreProd: +- name: CD_csu INT-TEST +- mzName: CD_csu/management-zone/CDcsu.name +- mzId: CD_csu/management-zone/CDcsu.id +- env: INT +- skipDeployment: "false" +CDcsu-INT-TEST.CN-PreProd: +- name: CD_csu INT-TEST +- mzName: CD_csu/management-zone/CDcsu.name +- mzId: CD_csu/management-zone/CDcsu.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_csu/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_csu/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_csu/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_csu/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_csu/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_csu/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_csu/management-zone/README.md b/BMW-Dynatrace-config/CD_csu/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_csu/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_csu/management-zone/default.json b/BMW-Dynatrace-config/CD_csu/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_csu/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_csu/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_csu/management-zone/management-zone.yaml new file mode 100644 index 00000000..28205d55 --- /dev/null +++ b/BMW-Dynatrace-config/CD_csu/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDcsu: default.json + +CDcsu: +- name: CD_csu +- tag: csu diff --git a/BMW-Dynatrace-config/CD_csu/notification/README.md b/BMW-Dynatrace-config/CD_csu/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_csu/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_csu/notification/email.json b/BMW-Dynatrace-config/CD_csu/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_csu/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_csu/notification/msTeams.json b/BMW-Dynatrace-config/CD_csu/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_csu/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_csu/notification/notification.yaml b/BMW-Dynatrace-config/CD_csu/notification/notification.yaml new file mode 100644 index 00000000..f9eaa882 --- /dev/null +++ b/BMW-Dynatrace-config/CD_csu/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDcsu-PROD: msTeams.json +- CDcsu-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcsu-PROD: +- name: CD_csu PROD +- alertingProfile: CD_csu/alerting-profile/CDcsu-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcsu-PROD.EMEA-Prod: +- name: CD_csu PROD +- alertingProfile: CD_csu/alerting-profile/CDcsu-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDcsu-PROD.NA-Prod: +- name: CD_csu PROD +- alertingProfile: CD_csu/alerting-profile/CDcsu-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDcsu-PROD.CN-Prod: +- name: CD_csu PROD +- alertingProfile: CD_csu/alerting-profile/CDcsu-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcsu-INT: +- name: CD_csu INT +- alertingProfile: CD_csu/alerting-profile/CDcsu-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcsu-INT.EMEA-PreProd: +- name: CD_csu INT +- alertingProfile: CD_csu/alerting-profile/CDcsu-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDcsu-INT.NA-PreProd: +- name: CD_csu INT +- alertingProfile: CD_csu/alerting-profile/CDcsu-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDcsu-INT.CN-PreProd: +- name: CD_csu INT +- alertingProfile: CD_csu/alerting-profile/CDcsu-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_csu/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_csu/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_csu/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_csu/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_csu/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_csu/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_csu/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_csu/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..9094d781 --- /dev/null +++ b/BMW-Dynatrace-config/CD_csu/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- csu: default.json + +csu: +- name: CD_csu - +- mzName: CD_csu/management-zone/CDcsu.name +- mzId: CD_csu/management-zone/CDcsu.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-event-origin/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_ctns-event-origin/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..1b2d83d3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-event-origin/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDctns-event-origin-PROD: default.json +- CDctns-event-origin-E2E: default.json +- CDctns-event-origin-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDctns-event-origin-PROD: +- name: CD_ctns-event-origin PROD +- tag: ctns-event-origin +- mzId: CD_ctns-event-origin/management-zone/CDctns-event-origin.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDctns-event-origin-PROD.EMEA-Prod: +- name: CD_ctns-event-origin PROD +- tag: ctns-event-origin +- mzId: CD_ctns-event-origin/management-zone/CDctns-event-origin.id +- env: PROD +- skipDeployment: "false" +CDctns-event-origin-PROD.NA-Prod: +- name: CD_ctns-event-origin PROD +- tag: ctns-event-origin +- mzId: CD_ctns-event-origin/management-zone/CDctns-event-origin.id +- env: PROD +- skipDeployment: "false" +CDctns-event-origin-PROD.CN-Prod: +- name: CD_ctns-event-origin PROD +- tag: ctns-event-origin +- mzId: CD_ctns-event-origin/management-zone/CDctns-event-origin.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDctns-event-origin-E2E: +- name: CD_ctns-event-origin E2E +- tag: ctns-event-origin +- mzId: CD_ctns-event-origin/management-zone/CDctns-event-origin.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDctns-event-origin-E2E.EMEA-Prod: +- name: CD_ctns-event-origin E2E +- tag: ctns-event-origin +- mzId: CD_ctns-event-origin/management-zone/CDctns-event-origin.id +- env: E2E +- skipDeployment: "false" +CDctns-event-origin-E2E.NA-Prod: +- name: CD_ctns-event-origin E2E +- tag: ctns-event-origin +- mzId: CD_ctns-event-origin/management-zone/CDctns-event-origin.id +- env: E2E +- skipDeployment: "false" +CDctns-event-origin-E2E.CN-Prod: +- name: CD_ctns-event-origin E2E +- tag: ctns-event-origin +- mzId: CD_ctns-event-origin/management-zone/CDctns-event-origin.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDctns-event-origin-INT: +- name: CD_ctns-event-origin INT +- tag: ctns-event-origin +- mzId: CD_ctns-event-origin/management-zone/CDctns-event-origin.id +- env: INT +- skipDeployment: "true" +#Configuration +CDctns-event-origin-INT.EMEA-PreProd: +- name: CD_ctns-event-origin INT +- tag: ctns-event-origin +- mzId: CD_ctns-event-origin/management-zone/CDctns-event-origin.id +- env: INT +- skipDeployment: "false" +CDctns-event-origin-INT.NA-PreProd: +- name: CD_ctns-event-origin INT +- tag: ctns-event-origin +- mzId: CD_ctns-event-origin/management-zone/CDctns-event-origin.id +- env: INT +- skipDeployment: "false" +CDctns-event-origin-INT.CN-PreProd: +- name: CD_ctns-event-origin INT +- tag: ctns-event-origin +- mzId: CD_ctns-event-origin/management-zone/CDctns-event-origin.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-event-origin/alerting-profile/default.json b/BMW-Dynatrace-config/CD_ctns-event-origin/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-event-origin/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-event-origin/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_ctns-event-origin/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-event-origin/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-event-origin/custom-service-java/README.md b/BMW-Dynatrace-config/CD_ctns-event-origin/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-event-origin/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-event-origin/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_ctns-event-origin/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-event-origin/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-event-origin/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_ctns-event-origin/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-event-origin/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-event-origin/dashboard/README.md b/BMW-Dynatrace-config/CD_ctns-event-origin/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-event-origin/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-event-origin/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_ctns-event-origin/dashboard/dashboard.yaml new file mode 100644 index 00000000..f5d42730 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-event-origin/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDctns-event-origin-PROD-E2E: defaultPRODE2E.json +- CDctns-event-origin-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDctns-event-origin-PROD-E2E: +- name: CD_ctns-event-origin PROD +- mzName: CD_ctns-event-origin/management-zone/CDctns-event-origin.name +- mzId: CD_ctns-event-origin/management-zone/CDctns-event-origin.id +- skipDeployment: "true" +#Configuration +CDctns-event-origin-PROD-E2E.EMEA-Prod: +- name: CD_ctns-event-origin PROD +- mzName: CD_ctns-event-origin/management-zone/CDctns-event-origin.name +- mzId: CD_ctns-event-origin/management-zone/CDctns-event-origin.id +- tag: ctns-event-origin +- skipDeployment: "false" +CDctns-event-origin-PROD-E2E.NA-Prod: +- name: CD_ctns-event-origin PROD +- mzName: CD_ctns-event-origin/management-zone/CDctns-event-origin.name +- mzId: CD_ctns-event-origin/management-zone/CDctns-event-origin.id +- tag: ctns-event-origin +- skipDeployment: "false" +CDctns-event-origin-PROD-E2E.CN-Prod: +- name: CD_ctns-event-origin PROD +- mzName: CD_ctns-event-origin/management-zone/CDctns-event-origin.name +- mzId: CD_ctns-event-origin/management-zone/CDctns-event-origin.id +- tag: ctns-event-origin +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDctns-event-origin-INT-TEST: +- name: CD_ctns-event-origin INT-TEST +- mzName: CD_ctns-event-origin/management-zone/CDctns-event-origin.name +- mzId: CD_ctns-event-origin/management-zone/CDctns-event-origin.id +- tag: ctns-event-origin +- skipDeployment: "true" +#Configuration +CDctns-event-origin-INT-TEST.EMEA-PreProd: +- name: CD_ctns-event-origin INT-TEST +- mzName: CD_ctns-event-origin/management-zone/CDctns-event-origin.name +- mzId: CD_ctns-event-origin/management-zone/CDctns-event-origin.id +- tag: ctns-event-origin +- skipDeployment: "false" +CDctns-event-origin-INT-TEST.NA-PreProd: +- name: CD_ctns-event-origin INT-TEST +- mzName: CD_ctns-event-origin/management-zone/CDctns-event-origin.name +- mzId: CD_ctns-event-origin/management-zone/CDctns-event-origin.id +- env: INT +- skipDeployment: "false" +CDctns-event-origin-INT-TEST.CN-PreProd: +- name: CD_ctns-event-origin INT-TEST +- mzName: CD_ctns-event-origin/management-zone/CDctns-event-origin.name +- mzId: CD_ctns-event-origin/management-zone/CDctns-event-origin.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-event-origin/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_ctns-event-origin/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-event-origin/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-event-origin/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_ctns-event-origin/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-event-origin/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-event-origin/management-zone/README.md b/BMW-Dynatrace-config/CD_ctns-event-origin/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-event-origin/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_ctns-event-origin/management-zone/default.json b/BMW-Dynatrace-config/CD_ctns-event-origin/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-event-origin/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-event-origin/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_ctns-event-origin/management-zone/management-zone.yaml new file mode 100644 index 00000000..71ed2b00 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-event-origin/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDctns-event-origin: default.json + +CDctns-event-origin: +- name: CD_ctns-event-origin +- tag: ctns-event-origin diff --git a/BMW-Dynatrace-config/CD_ctns-event-origin/notification/README.md b/BMW-Dynatrace-config/CD_ctns-event-origin/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-event-origin/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-event-origin/notification/email.json b/BMW-Dynatrace-config/CD_ctns-event-origin/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-event-origin/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-event-origin/notification/msTeams.json b/BMW-Dynatrace-config/CD_ctns-event-origin/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-event-origin/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-event-origin/notification/notification.yaml b/BMW-Dynatrace-config/CD_ctns-event-origin/notification/notification.yaml new file mode 100644 index 00000000..82880be0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-event-origin/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDctns-event-origin-PROD: msTeams.json +- CDctns-event-origin-E2E: msTeams.json +- CDctns-event-origin-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDctns-event-origin-PROD: +- name: CD_ctns-event-origin PROD +- alertingProfile: CD_ctns-event-origin/alerting-profile/CDctns-event-origin-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDctns-event-origin-PROD.EMEA-Prod: +- name: CD_ctns-event-origin PROD +- alertingProfile: CD_ctns-event-origin/alerting-profile/CDctns-event-origin-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDctns-event-origin-PROD.NA-Prod: +- name: CD_ctns-event-origin PROD +- alertingProfile: CD_ctns-event-origin/alerting-profile/CDctns-event-origin-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDctns-event-origin-PROD.CN-Prod: +- name: CD_ctns-event-origin PROD +- alertingProfile: CD_ctns-event-origin/alerting-profile/CDctns-event-origin-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDctns-event-origin-E2E: +- name: CD_ctns-event-origin E2E +- alertingProfile: CD_ctns-event-origin/alerting-profile/CDctns-event-origin-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDctns-event-origin-E2E.EMEA-Prod: +- name: CD_ctns-event-origin E2E +- alertingProfile: CD_ctns-event-origin/alerting-profile/CDctns-event-origin-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDctns-event-origin-E2E.NA-Prod: +- name: CD_ctns-event-origin E2E +- alertingProfile: CD_ctns-event-origin/alerting-profile/CDctns-event-origin-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDctns-event-origin-E2E.CN-Prod: +- name: CD_ctns-event-origin E2E +- alertingProfile: CD_ctns-event-origin/alerting-profile/CDctns-event-origin-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDctns-event-origin-INT: +- name: CD_ctns-event-origin INT +- alertingProfile: CD_ctns-event-origin/alerting-profile/CDctns-event-origin-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDctns-event-origin-INT.EMEA-PreProd: +- name: CD_ctns-event-origin INT +- alertingProfile: CD_ctns-event-origin/alerting-profile/CDctns-event-origin-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDctns-event-origin-INT.NA-PreProd: +- name: CD_ctns-event-origin INT +- alertingProfile: CD_ctns-event-origin/alerting-profile/CDctns-event-origin-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDctns-event-origin-INT.CN-PreProd: +- name: CD_ctns-event-origin INT +- alertingProfile: CD_ctns-event-origin/alerting-profile/CDctns-event-origin-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-event-origin/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_ctns-event-origin/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-event-origin/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-event-origin/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_ctns-event-origin/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-event-origin/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-event-origin/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_ctns-event-origin/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..f0bc84d7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-event-origin/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- ctns-event-origin: default.json + +ctns-event-origin: +- name: CD_ctns-event-origin - +- mzName: CD_ctns-event-origin/management-zone/CDctns-event-origin.name +- mzId: CD_ctns-event-origin/management-zone/CDctns-event-origin.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-marketing-api/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_ctns-marketing-api/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..d4f025ed --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-marketing-api/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDctns-marketing-api-PROD: default.json +- CDctns-marketing-api-E2E: default.json +- CDctns-marketing-api-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDctns-marketing-api-PROD: +- name: CD_ctns-marketing-api PROD +- tag: ctns-marketing-api +- mzId: CD_ctns-marketing-api/management-zone/CDctns-marketing-api.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDctns-marketing-api-PROD.EMEA-Prod: +- name: CD_ctns-marketing-api PROD +- tag: ctns-marketing-api +- mzId: CD_ctns-marketing-api/management-zone/CDctns-marketing-api.id +- env: PROD +- skipDeployment: "false" +CDctns-marketing-api-PROD.NA-Prod: +- name: CD_ctns-marketing-api PROD +- tag: ctns-marketing-api +- mzId: CD_ctns-marketing-api/management-zone/CDctns-marketing-api.id +- env: PROD +- skipDeployment: "false" +CDctns-marketing-api-PROD.CN-Prod: +- name: CD_ctns-marketing-api PROD +- tag: ctns-marketing-api +- mzId: CD_ctns-marketing-api/management-zone/CDctns-marketing-api.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDctns-marketing-api-E2E: +- name: CD_ctns-marketing-api E2E +- tag: ctns-marketing-api +- mzId: CD_ctns-marketing-api/management-zone/CDctns-marketing-api.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDctns-marketing-api-E2E.EMEA-Prod: +- name: CD_ctns-marketing-api E2E +- tag: ctns-marketing-api +- mzId: CD_ctns-marketing-api/management-zone/CDctns-marketing-api.id +- env: E2E +- skipDeployment: "false" +CDctns-marketing-api-E2E.NA-Prod: +- name: CD_ctns-marketing-api E2E +- tag: ctns-marketing-api +- mzId: CD_ctns-marketing-api/management-zone/CDctns-marketing-api.id +- env: E2E +- skipDeployment: "false" +CDctns-marketing-api-E2E.CN-Prod: +- name: CD_ctns-marketing-api E2E +- tag: ctns-marketing-api +- mzId: CD_ctns-marketing-api/management-zone/CDctns-marketing-api.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDctns-marketing-api-INT: +- name: CD_ctns-marketing-api INT +- tag: ctns-marketing-api +- mzId: CD_ctns-marketing-api/management-zone/CDctns-marketing-api.id +- env: INT +- skipDeployment: "true" +#Configuration +CDctns-marketing-api-INT.EMEA-PreProd: +- name: CD_ctns-marketing-api INT +- tag: ctns-marketing-api +- mzId: CD_ctns-marketing-api/management-zone/CDctns-marketing-api.id +- env: INT +- skipDeployment: "false" +CDctns-marketing-api-INT.NA-PreProd: +- name: CD_ctns-marketing-api INT +- tag: ctns-marketing-api +- mzId: CD_ctns-marketing-api/management-zone/CDctns-marketing-api.id +- env: INT +- skipDeployment: "false" +CDctns-marketing-api-INT.CN-PreProd: +- name: CD_ctns-marketing-api INT +- tag: ctns-marketing-api +- mzId: CD_ctns-marketing-api/management-zone/CDctns-marketing-api.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-marketing-api/alerting-profile/default.json b/BMW-Dynatrace-config/CD_ctns-marketing-api/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-marketing-api/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-marketing-api/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_ctns-marketing-api/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-marketing-api/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-marketing-api/custom-service-java/README.md b/BMW-Dynatrace-config/CD_ctns-marketing-api/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-marketing-api/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-marketing-api/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_ctns-marketing-api/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-marketing-api/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-marketing-api/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_ctns-marketing-api/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-marketing-api/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-marketing-api/dashboard/README.md b/BMW-Dynatrace-config/CD_ctns-marketing-api/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-marketing-api/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-marketing-api/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_ctns-marketing-api/dashboard/dashboard.yaml new file mode 100644 index 00000000..e4a07288 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-marketing-api/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDctns-marketing-api-PROD-E2E: defaultPRODE2E.json +- CDctns-marketing-api-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDctns-marketing-api-PROD-E2E: +- name: CD_ctns-marketing-api PROD +- mzName: CD_ctns-marketing-api/management-zone/CDctns-marketing-api.name +- mzId: CD_ctns-marketing-api/management-zone/CDctns-marketing-api.id +- skipDeployment: "true" +#Configuration +CDctns-marketing-api-PROD-E2E.EMEA-Prod: +- name: CD_ctns-marketing-api PROD +- mzName: CD_ctns-marketing-api/management-zone/CDctns-marketing-api.name +- mzId: CD_ctns-marketing-api/management-zone/CDctns-marketing-api.id +- tag: ctns-marketing-api +- skipDeployment: "false" +CDctns-marketing-api-PROD-E2E.NA-Prod: +- name: CD_ctns-marketing-api PROD +- mzName: CD_ctns-marketing-api/management-zone/CDctns-marketing-api.name +- mzId: CD_ctns-marketing-api/management-zone/CDctns-marketing-api.id +- tag: ctns-marketing-api +- skipDeployment: "false" +CDctns-marketing-api-PROD-E2E.CN-Prod: +- name: CD_ctns-marketing-api PROD +- mzName: CD_ctns-marketing-api/management-zone/CDctns-marketing-api.name +- mzId: CD_ctns-marketing-api/management-zone/CDctns-marketing-api.id +- tag: ctns-marketing-api +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDctns-marketing-api-INT-TEST: +- name: CD_ctns-marketing-api INT-TEST +- mzName: CD_ctns-marketing-api/management-zone/CDctns-marketing-api.name +- mzId: CD_ctns-marketing-api/management-zone/CDctns-marketing-api.id +- tag: ctns-marketing-api +- skipDeployment: "true" +#Configuration +CDctns-marketing-api-INT-TEST.EMEA-PreProd: +- name: CD_ctns-marketing-api INT-TEST +- mzName: CD_ctns-marketing-api/management-zone/CDctns-marketing-api.name +- mzId: CD_ctns-marketing-api/management-zone/CDctns-marketing-api.id +- tag: ctns-marketing-api +- skipDeployment: "false" +CDctns-marketing-api-INT-TEST.NA-PreProd: +- name: CD_ctns-marketing-api INT-TEST +- mzName: CD_ctns-marketing-api/management-zone/CDctns-marketing-api.name +- mzId: CD_ctns-marketing-api/management-zone/CDctns-marketing-api.id +- env: INT +- skipDeployment: "false" +CDctns-marketing-api-INT-TEST.CN-PreProd: +- name: CD_ctns-marketing-api INT-TEST +- mzName: CD_ctns-marketing-api/management-zone/CDctns-marketing-api.name +- mzId: CD_ctns-marketing-api/management-zone/CDctns-marketing-api.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-marketing-api/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_ctns-marketing-api/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-marketing-api/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-marketing-api/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_ctns-marketing-api/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-marketing-api/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-marketing-api/management-zone/README.md b/BMW-Dynatrace-config/CD_ctns-marketing-api/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-marketing-api/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_ctns-marketing-api/management-zone/default.json b/BMW-Dynatrace-config/CD_ctns-marketing-api/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-marketing-api/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-marketing-api/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_ctns-marketing-api/management-zone/management-zone.yaml new file mode 100644 index 00000000..be41d90e --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-marketing-api/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDctns-marketing-api: default.json + +CDctns-marketing-api: +- name: CD_ctns-marketing-api +- tag: ctns-marketing-api diff --git a/BMW-Dynatrace-config/CD_ctns-marketing-api/notification/README.md b/BMW-Dynatrace-config/CD_ctns-marketing-api/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-marketing-api/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-marketing-api/notification/email.json b/BMW-Dynatrace-config/CD_ctns-marketing-api/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-marketing-api/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-marketing-api/notification/msTeams.json b/BMW-Dynatrace-config/CD_ctns-marketing-api/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-marketing-api/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-marketing-api/notification/notification.yaml b/BMW-Dynatrace-config/CD_ctns-marketing-api/notification/notification.yaml new file mode 100644 index 00000000..5d7ec1ed --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-marketing-api/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDctns-marketing-api-PROD: msTeams.json +- CDctns-marketing-api-E2E: msTeams.json +- CDctns-marketing-api-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDctns-marketing-api-PROD: +- name: CD_ctns-marketing-api PROD +- alertingProfile: CD_ctns-marketing-api/alerting-profile/CDctns-marketing-api-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDctns-marketing-api-PROD.EMEA-Prod: +- name: CD_ctns-marketing-api PROD +- alertingProfile: CD_ctns-marketing-api/alerting-profile/CDctns-marketing-api-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDctns-marketing-api-PROD.NA-Prod: +- name: CD_ctns-marketing-api PROD +- alertingProfile: CD_ctns-marketing-api/alerting-profile/CDctns-marketing-api-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDctns-marketing-api-PROD.CN-Prod: +- name: CD_ctns-marketing-api PROD +- alertingProfile: CD_ctns-marketing-api/alerting-profile/CDctns-marketing-api-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDctns-marketing-api-E2E: +- name: CD_ctns-marketing-api E2E +- alertingProfile: CD_ctns-marketing-api/alerting-profile/CDctns-marketing-api-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDctns-marketing-api-E2E.EMEA-Prod: +- name: CD_ctns-marketing-api E2E +- alertingProfile: CD_ctns-marketing-api/alerting-profile/CDctns-marketing-api-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDctns-marketing-api-E2E.NA-Prod: +- name: CD_ctns-marketing-api E2E +- alertingProfile: CD_ctns-marketing-api/alerting-profile/CDctns-marketing-api-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDctns-marketing-api-E2E.CN-Prod: +- name: CD_ctns-marketing-api E2E +- alertingProfile: CD_ctns-marketing-api/alerting-profile/CDctns-marketing-api-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDctns-marketing-api-INT: +- name: CD_ctns-marketing-api INT +- alertingProfile: CD_ctns-marketing-api/alerting-profile/CDctns-marketing-api-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDctns-marketing-api-INT.EMEA-PreProd: +- name: CD_ctns-marketing-api INT +- alertingProfile: CD_ctns-marketing-api/alerting-profile/CDctns-marketing-api-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDctns-marketing-api-INT.NA-PreProd: +- name: CD_ctns-marketing-api INT +- alertingProfile: CD_ctns-marketing-api/alerting-profile/CDctns-marketing-api-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDctns-marketing-api-INT.CN-PreProd: +- name: CD_ctns-marketing-api INT +- alertingProfile: CD_ctns-marketing-api/alerting-profile/CDctns-marketing-api-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-marketing-api/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_ctns-marketing-api/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-marketing-api/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-marketing-api/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_ctns-marketing-api/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-marketing-api/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-marketing-api/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_ctns-marketing-api/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..feb6587a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-marketing-api/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- ctns-marketing-api: default.json + +ctns-marketing-api: +- name: CD_ctns-marketing-api - +- mzName: CD_ctns-marketing-api/management-zone/CDctns-marketing-api.name +- mzId: CD_ctns-marketing-api/management-zone/CDctns-marketing-api.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-vehicle-api/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_ctns-vehicle-api/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..73c301a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-vehicle-api/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDctns-vehicle-api-PROD: default.json +- CDctns-vehicle-api-E2E: default.json +- CDctns-vehicle-api-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDctns-vehicle-api-PROD: +- name: CD_ctns-vehicle-api PROD +- tag: ctns-vehicle-api +- mzId: CD_ctns-vehicle-api/management-zone/CDctns-vehicle-api.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDctns-vehicle-api-PROD.EMEA-Prod: +- name: CD_ctns-vehicle-api PROD +- tag: ctns-vehicle-api +- mzId: CD_ctns-vehicle-api/management-zone/CDctns-vehicle-api.id +- env: PROD +- skipDeployment: "false" +CDctns-vehicle-api-PROD.NA-Prod: +- name: CD_ctns-vehicle-api PROD +- tag: ctns-vehicle-api +- mzId: CD_ctns-vehicle-api/management-zone/CDctns-vehicle-api.id +- env: PROD +- skipDeployment: "false" +CDctns-vehicle-api-PROD.CN-Prod: +- name: CD_ctns-vehicle-api PROD +- tag: ctns-vehicle-api +- mzId: CD_ctns-vehicle-api/management-zone/CDctns-vehicle-api.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDctns-vehicle-api-E2E: +- name: CD_ctns-vehicle-api E2E +- tag: ctns-vehicle-api +- mzId: CD_ctns-vehicle-api/management-zone/CDctns-vehicle-api.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDctns-vehicle-api-E2E.EMEA-Prod: +- name: CD_ctns-vehicle-api E2E +- tag: ctns-vehicle-api +- mzId: CD_ctns-vehicle-api/management-zone/CDctns-vehicle-api.id +- env: E2E +- skipDeployment: "false" +CDctns-vehicle-api-E2E.NA-Prod: +- name: CD_ctns-vehicle-api E2E +- tag: ctns-vehicle-api +- mzId: CD_ctns-vehicle-api/management-zone/CDctns-vehicle-api.id +- env: E2E +- skipDeployment: "false" +CDctns-vehicle-api-E2E.CN-Prod: +- name: CD_ctns-vehicle-api E2E +- tag: ctns-vehicle-api +- mzId: CD_ctns-vehicle-api/management-zone/CDctns-vehicle-api.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDctns-vehicle-api-INT: +- name: CD_ctns-vehicle-api INT +- tag: ctns-vehicle-api +- mzId: CD_ctns-vehicle-api/management-zone/CDctns-vehicle-api.id +- env: INT +- skipDeployment: "true" +#Configuration +CDctns-vehicle-api-INT.EMEA-PreProd: +- name: CD_ctns-vehicle-api INT +- tag: ctns-vehicle-api +- mzId: CD_ctns-vehicle-api/management-zone/CDctns-vehicle-api.id +- env: INT +- skipDeployment: "false" +CDctns-vehicle-api-INT.NA-PreProd: +- name: CD_ctns-vehicle-api INT +- tag: ctns-vehicle-api +- mzId: CD_ctns-vehicle-api/management-zone/CDctns-vehicle-api.id +- env: INT +- skipDeployment: "false" +CDctns-vehicle-api-INT.CN-PreProd: +- name: CD_ctns-vehicle-api INT +- tag: ctns-vehicle-api +- mzId: CD_ctns-vehicle-api/management-zone/CDctns-vehicle-api.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-vehicle-api/alerting-profile/default.json b/BMW-Dynatrace-config/CD_ctns-vehicle-api/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-vehicle-api/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-vehicle-api/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_ctns-vehicle-api/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-vehicle-api/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-vehicle-api/custom-service-java/README.md b/BMW-Dynatrace-config/CD_ctns-vehicle-api/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-vehicle-api/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-vehicle-api/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_ctns-vehicle-api/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-vehicle-api/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-vehicle-api/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_ctns-vehicle-api/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-vehicle-api/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-vehicle-api/dashboard/README.md b/BMW-Dynatrace-config/CD_ctns-vehicle-api/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-vehicle-api/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-vehicle-api/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_ctns-vehicle-api/dashboard/dashboard.yaml new file mode 100644 index 00000000..ca69dcc5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-vehicle-api/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDctns-vehicle-api-PROD-E2E: defaultPRODE2E.json +- CDctns-vehicle-api-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDctns-vehicle-api-PROD-E2E: +- name: CD_ctns-vehicle-api PROD +- mzName: CD_ctns-vehicle-api/management-zone/CDctns-vehicle-api.name +- mzId: CD_ctns-vehicle-api/management-zone/CDctns-vehicle-api.id +- skipDeployment: "true" +#Configuration +CDctns-vehicle-api-PROD-E2E.EMEA-Prod: +- name: CD_ctns-vehicle-api PROD +- mzName: CD_ctns-vehicle-api/management-zone/CDctns-vehicle-api.name +- mzId: CD_ctns-vehicle-api/management-zone/CDctns-vehicle-api.id +- tag: ctns-vehicle-api +- skipDeployment: "false" +CDctns-vehicle-api-PROD-E2E.NA-Prod: +- name: CD_ctns-vehicle-api PROD +- mzName: CD_ctns-vehicle-api/management-zone/CDctns-vehicle-api.name +- mzId: CD_ctns-vehicle-api/management-zone/CDctns-vehicle-api.id +- tag: ctns-vehicle-api +- skipDeployment: "false" +CDctns-vehicle-api-PROD-E2E.CN-Prod: +- name: CD_ctns-vehicle-api PROD +- mzName: CD_ctns-vehicle-api/management-zone/CDctns-vehicle-api.name +- mzId: CD_ctns-vehicle-api/management-zone/CDctns-vehicle-api.id +- tag: ctns-vehicle-api +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDctns-vehicle-api-INT-TEST: +- name: CD_ctns-vehicle-api INT-TEST +- mzName: CD_ctns-vehicle-api/management-zone/CDctns-vehicle-api.name +- mzId: CD_ctns-vehicle-api/management-zone/CDctns-vehicle-api.id +- tag: ctns-vehicle-api +- skipDeployment: "true" +#Configuration +CDctns-vehicle-api-INT-TEST.EMEA-PreProd: +- name: CD_ctns-vehicle-api INT-TEST +- mzName: CD_ctns-vehicle-api/management-zone/CDctns-vehicle-api.name +- mzId: CD_ctns-vehicle-api/management-zone/CDctns-vehicle-api.id +- tag: ctns-vehicle-api +- skipDeployment: "false" +CDctns-vehicle-api-INT-TEST.NA-PreProd: +- name: CD_ctns-vehicle-api INT-TEST +- mzName: CD_ctns-vehicle-api/management-zone/CDctns-vehicle-api.name +- mzId: CD_ctns-vehicle-api/management-zone/CDctns-vehicle-api.id +- env: INT +- skipDeployment: "false" +CDctns-vehicle-api-INT-TEST.CN-PreProd: +- name: CD_ctns-vehicle-api INT-TEST +- mzName: CD_ctns-vehicle-api/management-zone/CDctns-vehicle-api.name +- mzId: CD_ctns-vehicle-api/management-zone/CDctns-vehicle-api.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-vehicle-api/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_ctns-vehicle-api/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-vehicle-api/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-vehicle-api/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_ctns-vehicle-api/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-vehicle-api/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-vehicle-api/management-zone/README.md b/BMW-Dynatrace-config/CD_ctns-vehicle-api/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-vehicle-api/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_ctns-vehicle-api/management-zone/default.json b/BMW-Dynatrace-config/CD_ctns-vehicle-api/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-vehicle-api/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-vehicle-api/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_ctns-vehicle-api/management-zone/management-zone.yaml new file mode 100644 index 00000000..688bad2f --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-vehicle-api/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDctns-vehicle-api: default.json + +CDctns-vehicle-api: +- name: CD_ctns-vehicle-api +- tag: ctns-vehicle-api diff --git a/BMW-Dynatrace-config/CD_ctns-vehicle-api/notification/README.md b/BMW-Dynatrace-config/CD_ctns-vehicle-api/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-vehicle-api/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-vehicle-api/notification/email.json b/BMW-Dynatrace-config/CD_ctns-vehicle-api/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-vehicle-api/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-vehicle-api/notification/msTeams.json b/BMW-Dynatrace-config/CD_ctns-vehicle-api/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-vehicle-api/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-vehicle-api/notification/notification.yaml b/BMW-Dynatrace-config/CD_ctns-vehicle-api/notification/notification.yaml new file mode 100644 index 00000000..4036c55b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-vehicle-api/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDctns-vehicle-api-PROD: msTeams.json +- CDctns-vehicle-api-E2E: msTeams.json +- CDctns-vehicle-api-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDctns-vehicle-api-PROD: +- name: CD_ctns-vehicle-api PROD +- alertingProfile: CD_ctns-vehicle-api/alerting-profile/CDctns-vehicle-api-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDctns-vehicle-api-PROD.EMEA-Prod: +- name: CD_ctns-vehicle-api PROD +- alertingProfile: CD_ctns-vehicle-api/alerting-profile/CDctns-vehicle-api-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDctns-vehicle-api-PROD.NA-Prod: +- name: CD_ctns-vehicle-api PROD +- alertingProfile: CD_ctns-vehicle-api/alerting-profile/CDctns-vehicle-api-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDctns-vehicle-api-PROD.CN-Prod: +- name: CD_ctns-vehicle-api PROD +- alertingProfile: CD_ctns-vehicle-api/alerting-profile/CDctns-vehicle-api-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDctns-vehicle-api-E2E: +- name: CD_ctns-vehicle-api E2E +- alertingProfile: CD_ctns-vehicle-api/alerting-profile/CDctns-vehicle-api-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDctns-vehicle-api-E2E.EMEA-Prod: +- name: CD_ctns-vehicle-api E2E +- alertingProfile: CD_ctns-vehicle-api/alerting-profile/CDctns-vehicle-api-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDctns-vehicle-api-E2E.NA-Prod: +- name: CD_ctns-vehicle-api E2E +- alertingProfile: CD_ctns-vehicle-api/alerting-profile/CDctns-vehicle-api-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDctns-vehicle-api-E2E.CN-Prod: +- name: CD_ctns-vehicle-api E2E +- alertingProfile: CD_ctns-vehicle-api/alerting-profile/CDctns-vehicle-api-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDctns-vehicle-api-INT: +- name: CD_ctns-vehicle-api INT +- alertingProfile: CD_ctns-vehicle-api/alerting-profile/CDctns-vehicle-api-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDctns-vehicle-api-INT.EMEA-PreProd: +- name: CD_ctns-vehicle-api INT +- alertingProfile: CD_ctns-vehicle-api/alerting-profile/CDctns-vehicle-api-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDctns-vehicle-api-INT.NA-PreProd: +- name: CD_ctns-vehicle-api INT +- alertingProfile: CD_ctns-vehicle-api/alerting-profile/CDctns-vehicle-api-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDctns-vehicle-api-INT.CN-PreProd: +- name: CD_ctns-vehicle-api INT +- alertingProfile: CD_ctns-vehicle-api/alerting-profile/CDctns-vehicle-api-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-vehicle-api/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_ctns-vehicle-api/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-vehicle-api/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-vehicle-api/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_ctns-vehicle-api/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-vehicle-api/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-vehicle-api/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_ctns-vehicle-api/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..e3b03230 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-vehicle-api/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- ctns-vehicle-api: default.json + +ctns-vehicle-api: +- name: CD_ctns-vehicle-api - +- mzName: CD_ctns-vehicle-api/management-zone/CDctns-vehicle-api.name +- mzId: CD_ctns-vehicle-api/management-zone/CDctns-vehicle-api.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_current-driver-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_current-driver-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..2ad9fe0f --- /dev/null +++ b/BMW-Dynatrace-config/CD_current-driver-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDcurrent-driver-service-PROD: default.json +- CDcurrent-driver-service-E2E: default.json +- CDcurrent-driver-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcurrent-driver-service-PROD: +- name: CD_current-driver-service PROD +- tag: current-driver-service +- mzId: CD_current-driver-service/management-zone/CDcurrent-driver-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDcurrent-driver-service-PROD.EMEA-Prod: +- name: CD_current-driver-service PROD +- tag: current-driver-service +- mzId: CD_current-driver-service/management-zone/CDcurrent-driver-service.id +- env: PROD +- skipDeployment: "false" +CDcurrent-driver-service-PROD.NA-Prod: +- name: CD_current-driver-service PROD +- tag: current-driver-service +- mzId: CD_current-driver-service/management-zone/CDcurrent-driver-service.id +- env: PROD +- skipDeployment: "false" +CDcurrent-driver-service-PROD.CN-Prod: +- name: CD_current-driver-service PROD +- tag: current-driver-service +- mzId: CD_current-driver-service/management-zone/CDcurrent-driver-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcurrent-driver-service-E2E: +- name: CD_current-driver-service E2E +- tag: current-driver-service +- mzId: CD_current-driver-service/management-zone/CDcurrent-driver-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDcurrent-driver-service-E2E.EMEA-Prod: +- name: CD_current-driver-service E2E +- tag: current-driver-service +- mzId: CD_current-driver-service/management-zone/CDcurrent-driver-service.id +- env: E2E +- skipDeployment: "false" +CDcurrent-driver-service-E2E.NA-Prod: +- name: CD_current-driver-service E2E +- tag: current-driver-service +- mzId: CD_current-driver-service/management-zone/CDcurrent-driver-service.id +- env: E2E +- skipDeployment: "false" +CDcurrent-driver-service-E2E.CN-Prod: +- name: CD_current-driver-service E2E +- tag: current-driver-service +- mzId: CD_current-driver-service/management-zone/CDcurrent-driver-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDcurrent-driver-service-INT: +- name: CD_current-driver-service INT +- tag: current-driver-service +- mzId: CD_current-driver-service/management-zone/CDcurrent-driver-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDcurrent-driver-service-INT.EMEA-PreProd: +- name: CD_current-driver-service INT +- tag: current-driver-service +- mzId: CD_current-driver-service/management-zone/CDcurrent-driver-service.id +- env: INT +- skipDeployment: "false" +CDcurrent-driver-service-INT.NA-PreProd: +- name: CD_current-driver-service INT +- tag: current-driver-service +- mzId: CD_current-driver-service/management-zone/CDcurrent-driver-service.id +- env: INT +- skipDeployment: "false" +CDcurrent-driver-service-INT.CN-PreProd: +- name: CD_current-driver-service INT +- tag: current-driver-service +- mzId: CD_current-driver-service/management-zone/CDcurrent-driver-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_current-driver-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_current-driver-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_current-driver-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_current-driver-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_current-driver-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_current-driver-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_current-driver-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_current-driver-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_current-driver-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_current-driver-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_current-driver-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_current-driver-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_current-driver-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_current-driver-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_current-driver-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_current-driver-service/dashboard/README.md b/BMW-Dynatrace-config/CD_current-driver-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_current-driver-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_current-driver-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_current-driver-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..2fa561d0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_current-driver-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDcurrent-driver-service-PROD-E2E: defaultPRODE2E.json +- CDcurrent-driver-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDcurrent-driver-service-PROD-E2E: +- name: CD_current-driver-service PROD +- mzName: CD_current-driver-service/management-zone/CDcurrent-driver-service.name +- mzId: CD_current-driver-service/management-zone/CDcurrent-driver-service.id +- skipDeployment: "true" +#Configuration +CDcurrent-driver-service-PROD-E2E.EMEA-Prod: +- name: CD_current-driver-service PROD +- mzName: CD_current-driver-service/management-zone/CDcurrent-driver-service.name +- mzId: CD_current-driver-service/management-zone/CDcurrent-driver-service.id +- tag: current-driver-service +- skipDeployment: "false" +CDcurrent-driver-service-PROD-E2E.NA-Prod: +- name: CD_current-driver-service PROD +- mzName: CD_current-driver-service/management-zone/CDcurrent-driver-service.name +- mzId: CD_current-driver-service/management-zone/CDcurrent-driver-service.id +- tag: current-driver-service +- skipDeployment: "false" +CDcurrent-driver-service-PROD-E2E.CN-Prod: +- name: CD_current-driver-service PROD +- mzName: CD_current-driver-service/management-zone/CDcurrent-driver-service.name +- mzId: CD_current-driver-service/management-zone/CDcurrent-driver-service.id +- tag: current-driver-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDcurrent-driver-service-INT-TEST: +- name: CD_current-driver-service INT-TEST +- mzName: CD_current-driver-service/management-zone/CDcurrent-driver-service.name +- mzId: CD_current-driver-service/management-zone/CDcurrent-driver-service.id +- tag: current-driver-service +- skipDeployment: "true" +#Configuration +CDcurrent-driver-service-INT-TEST.EMEA-PreProd: +- name: CD_current-driver-service INT-TEST +- mzName: CD_current-driver-service/management-zone/CDcurrent-driver-service.name +- mzId: CD_current-driver-service/management-zone/CDcurrent-driver-service.id +- tag: current-driver-service +- skipDeployment: "false" +CDcurrent-driver-service-INT-TEST.NA-PreProd: +- name: CD_current-driver-service INT-TEST +- mzName: CD_current-driver-service/management-zone/CDcurrent-driver-service.name +- mzId: CD_current-driver-service/management-zone/CDcurrent-driver-service.id +- env: INT +- skipDeployment: "false" +CDcurrent-driver-service-INT-TEST.CN-PreProd: +- name: CD_current-driver-service INT-TEST +- mzName: CD_current-driver-service/management-zone/CDcurrent-driver-service.name +- mzId: CD_current-driver-service/management-zone/CDcurrent-driver-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_current-driver-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_current-driver-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_current-driver-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_current-driver-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_current-driver-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_current-driver-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_current-driver-service/management-zone/README.md b/BMW-Dynatrace-config/CD_current-driver-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_current-driver-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_current-driver-service/management-zone/default.json b/BMW-Dynatrace-config/CD_current-driver-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_current-driver-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_current-driver-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_current-driver-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..025ce105 --- /dev/null +++ b/BMW-Dynatrace-config/CD_current-driver-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDcurrent-driver-service: default.json + +CDcurrent-driver-service: +- name: CD_current-driver-service +- tag: current-driver-service diff --git a/BMW-Dynatrace-config/CD_current-driver-service/notification/README.md b/BMW-Dynatrace-config/CD_current-driver-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_current-driver-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_current-driver-service/notification/email.json b/BMW-Dynatrace-config/CD_current-driver-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_current-driver-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_current-driver-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_current-driver-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_current-driver-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_current-driver-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_current-driver-service/notification/notification.yaml new file mode 100644 index 00000000..a2cd6900 --- /dev/null +++ b/BMW-Dynatrace-config/CD_current-driver-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDcurrent-driver-service-PROD: msTeams.json +- CDcurrent-driver-service-E2E: msTeams.json +- CDcurrent-driver-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcurrent-driver-service-PROD: +- name: CD_current-driver-service PROD +- alertingProfile: CD_current-driver-service/alerting-profile/CDcurrent-driver-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcurrent-driver-service-PROD.EMEA-Prod: +- name: CD_current-driver-service PROD +- alertingProfile: CD_current-driver-service/alerting-profile/CDcurrent-driver-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDcurrent-driver-service-PROD.NA-Prod: +- name: CD_current-driver-service PROD +- alertingProfile: CD_current-driver-service/alerting-profile/CDcurrent-driver-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDcurrent-driver-service-PROD.CN-Prod: +- name: CD_current-driver-service PROD +- alertingProfile: CD_current-driver-service/alerting-profile/CDcurrent-driver-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcurrent-driver-service-E2E: +- name: CD_current-driver-service E2E +- alertingProfile: CD_current-driver-service/alerting-profile/CDcurrent-driver-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcurrent-driver-service-E2E.EMEA-Prod: +- name: CD_current-driver-service E2E +- alertingProfile: CD_current-driver-service/alerting-profile/CDcurrent-driver-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDcurrent-driver-service-E2E.NA-Prod: +- name: CD_current-driver-service E2E +- alertingProfile: CD_current-driver-service/alerting-profile/CDcurrent-driver-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDcurrent-driver-service-E2E.CN-Prod: +- name: CD_current-driver-service E2E +- alertingProfile: CD_current-driver-service/alerting-profile/CDcurrent-driver-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDcurrent-driver-service-INT: +- name: CD_current-driver-service INT +- alertingProfile: CD_current-driver-service/alerting-profile/CDcurrent-driver-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDcurrent-driver-service-INT.EMEA-PreProd: +- name: CD_current-driver-service INT +- alertingProfile: CD_current-driver-service/alerting-profile/CDcurrent-driver-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDcurrent-driver-service-INT.NA-PreProd: +- name: CD_current-driver-service INT +- alertingProfile: CD_current-driver-service/alerting-profile/CDcurrent-driver-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDcurrent-driver-service-INT.CN-PreProd: +- name: CD_current-driver-service INT +- alertingProfile: CD_current-driver-service/alerting-profile/CDcurrent-driver-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_current-driver-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_current-driver-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_current-driver-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_current-driver-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_current-driver-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_current-driver-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_current-driver-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_current-driver-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..f91cb8b8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_current-driver-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- current-driver-service: default.json + +current-driver-service: +- name: CD_current-driver-service - +- mzName: CD_current-driver-service/management-zone/CDcurrent-driver-service.name +- mzId: CD_current-driver-service/management-zone/CDcurrent-driver-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_data-deletion-processor/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_data-deletion-processor/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..32505e73 --- /dev/null +++ b/BMW-Dynatrace-config/CD_data-deletion-processor/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDdata-deletion-processor-PROD: default.json +- CDdata-deletion-processor-E2E: default.json +- CDdata-deletion-processor-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDdata-deletion-processor-PROD: +- name: CD_data-deletion-processor PROD +- tag: data-deletion-processor +- mzId: CD_data-deletion-processor/management-zone/CDdata-deletion-processor.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDdata-deletion-processor-PROD.EMEA-Prod: +- name: CD_data-deletion-processor PROD +- tag: data-deletion-processor +- mzId: CD_data-deletion-processor/management-zone/CDdata-deletion-processor.id +- env: PROD +- skipDeployment: "false" +CDdata-deletion-processor-PROD.NA-Prod: +- name: CD_data-deletion-processor PROD +- tag: data-deletion-processor +- mzId: CD_data-deletion-processor/management-zone/CDdata-deletion-processor.id +- env: PROD +- skipDeployment: "false" +CDdata-deletion-processor-PROD.CN-Prod: +- name: CD_data-deletion-processor PROD +- tag: data-deletion-processor +- mzId: CD_data-deletion-processor/management-zone/CDdata-deletion-processor.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDdata-deletion-processor-E2E: +- name: CD_data-deletion-processor E2E +- tag: data-deletion-processor +- mzId: CD_data-deletion-processor/management-zone/CDdata-deletion-processor.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDdata-deletion-processor-E2E.EMEA-Prod: +- name: CD_data-deletion-processor E2E +- tag: data-deletion-processor +- mzId: CD_data-deletion-processor/management-zone/CDdata-deletion-processor.id +- env: E2E +- skipDeployment: "false" +CDdata-deletion-processor-E2E.NA-Prod: +- name: CD_data-deletion-processor E2E +- tag: data-deletion-processor +- mzId: CD_data-deletion-processor/management-zone/CDdata-deletion-processor.id +- env: E2E +- skipDeployment: "false" +CDdata-deletion-processor-E2E.CN-Prod: +- name: CD_data-deletion-processor E2E +- tag: data-deletion-processor +- mzId: CD_data-deletion-processor/management-zone/CDdata-deletion-processor.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDdata-deletion-processor-INT: +- name: CD_data-deletion-processor INT +- tag: data-deletion-processor +- mzId: CD_data-deletion-processor/management-zone/CDdata-deletion-processor.id +- env: INT +- skipDeployment: "true" +#Configuration +CDdata-deletion-processor-INT.EMEA-PreProd: +- name: CD_data-deletion-processor INT +- tag: data-deletion-processor +- mzId: CD_data-deletion-processor/management-zone/CDdata-deletion-processor.id +- env: INT +- skipDeployment: "false" +CDdata-deletion-processor-INT.NA-PreProd: +- name: CD_data-deletion-processor INT +- tag: data-deletion-processor +- mzId: CD_data-deletion-processor/management-zone/CDdata-deletion-processor.id +- env: INT +- skipDeployment: "false" +CDdata-deletion-processor-INT.CN-PreProd: +- name: CD_data-deletion-processor INT +- tag: data-deletion-processor +- mzId: CD_data-deletion-processor/management-zone/CDdata-deletion-processor.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_data-deletion-processor/alerting-profile/default.json b/BMW-Dynatrace-config/CD_data-deletion-processor/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_data-deletion-processor/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_data-deletion-processor/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_data-deletion-processor/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_data-deletion-processor/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_data-deletion-processor/custom-service-java/README.md b/BMW-Dynatrace-config/CD_data-deletion-processor/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_data-deletion-processor/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_data-deletion-processor/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_data-deletion-processor/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_data-deletion-processor/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_data-deletion-processor/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_data-deletion-processor/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_data-deletion-processor/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_data-deletion-processor/dashboard/README.md b/BMW-Dynatrace-config/CD_data-deletion-processor/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_data-deletion-processor/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_data-deletion-processor/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_data-deletion-processor/dashboard/dashboard.yaml new file mode 100644 index 00000000..3ef30487 --- /dev/null +++ b/BMW-Dynatrace-config/CD_data-deletion-processor/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDdata-deletion-processor-PROD-E2E: defaultPRODE2E.json +- CDdata-deletion-processor-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDdata-deletion-processor-PROD-E2E: +- name: CD_data-deletion-processor PROD +- mzName: CD_data-deletion-processor/management-zone/CDdata-deletion-processor.name +- mzId: CD_data-deletion-processor/management-zone/CDdata-deletion-processor.id +- skipDeployment: "true" +#Configuration +CDdata-deletion-processor-PROD-E2E.EMEA-Prod: +- name: CD_data-deletion-processor PROD +- mzName: CD_data-deletion-processor/management-zone/CDdata-deletion-processor.name +- mzId: CD_data-deletion-processor/management-zone/CDdata-deletion-processor.id +- tag: data-deletion-processor +- skipDeployment: "false" +CDdata-deletion-processor-PROD-E2E.NA-Prod: +- name: CD_data-deletion-processor PROD +- mzName: CD_data-deletion-processor/management-zone/CDdata-deletion-processor.name +- mzId: CD_data-deletion-processor/management-zone/CDdata-deletion-processor.id +- tag: data-deletion-processor +- skipDeployment: "false" +CDdata-deletion-processor-PROD-E2E.CN-Prod: +- name: CD_data-deletion-processor PROD +- mzName: CD_data-deletion-processor/management-zone/CDdata-deletion-processor.name +- mzId: CD_data-deletion-processor/management-zone/CDdata-deletion-processor.id +- tag: data-deletion-processor +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDdata-deletion-processor-INT-TEST: +- name: CD_data-deletion-processor INT-TEST +- mzName: CD_data-deletion-processor/management-zone/CDdata-deletion-processor.name +- mzId: CD_data-deletion-processor/management-zone/CDdata-deletion-processor.id +- tag: data-deletion-processor +- skipDeployment: "true" +#Configuration +CDdata-deletion-processor-INT-TEST.EMEA-PreProd: +- name: CD_data-deletion-processor INT-TEST +- mzName: CD_data-deletion-processor/management-zone/CDdata-deletion-processor.name +- mzId: CD_data-deletion-processor/management-zone/CDdata-deletion-processor.id +- tag: data-deletion-processor +- skipDeployment: "false" +CDdata-deletion-processor-INT-TEST.NA-PreProd: +- name: CD_data-deletion-processor INT-TEST +- mzName: CD_data-deletion-processor/management-zone/CDdata-deletion-processor.name +- mzId: CD_data-deletion-processor/management-zone/CDdata-deletion-processor.id +- env: INT +- skipDeployment: "false" +CDdata-deletion-processor-INT-TEST.CN-PreProd: +- name: CD_data-deletion-processor INT-TEST +- mzName: CD_data-deletion-processor/management-zone/CDdata-deletion-processor.name +- mzId: CD_data-deletion-processor/management-zone/CDdata-deletion-processor.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_data-deletion-processor/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_data-deletion-processor/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_data-deletion-processor/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_data-deletion-processor/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_data-deletion-processor/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_data-deletion-processor/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_data-deletion-processor/management-zone/README.md b/BMW-Dynatrace-config/CD_data-deletion-processor/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_data-deletion-processor/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_data-deletion-processor/management-zone/default.json b/BMW-Dynatrace-config/CD_data-deletion-processor/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_data-deletion-processor/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_data-deletion-processor/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_data-deletion-processor/management-zone/management-zone.yaml new file mode 100644 index 00000000..48cea042 --- /dev/null +++ b/BMW-Dynatrace-config/CD_data-deletion-processor/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDdata-deletion-processor: default.json + +CDdata-deletion-processor: +- name: CD_data-deletion-processor +- tag: data-deletion-processor diff --git a/BMW-Dynatrace-config/CD_data-deletion-processor/notification/README.md b/BMW-Dynatrace-config/CD_data-deletion-processor/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_data-deletion-processor/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_data-deletion-processor/notification/email.json b/BMW-Dynatrace-config/CD_data-deletion-processor/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_data-deletion-processor/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_data-deletion-processor/notification/msTeams.json b/BMW-Dynatrace-config/CD_data-deletion-processor/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_data-deletion-processor/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_data-deletion-processor/notification/notification.yaml b/BMW-Dynatrace-config/CD_data-deletion-processor/notification/notification.yaml new file mode 100644 index 00000000..e80c660a --- /dev/null +++ b/BMW-Dynatrace-config/CD_data-deletion-processor/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDdata-deletion-processor-PROD: msTeams.json +- CDdata-deletion-processor-E2E: msTeams.json +- CDdata-deletion-processor-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdata-deletion-processor-PROD: +- name: CD_data-deletion-processor PROD +- alertingProfile: CD_data-deletion-processor/alerting-profile/CDdata-deletion-processor-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdata-deletion-processor-PROD.EMEA-Prod: +- name: CD_data-deletion-processor PROD +- alertingProfile: CD_data-deletion-processor/alerting-profile/CDdata-deletion-processor-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDdata-deletion-processor-PROD.NA-Prod: +- name: CD_data-deletion-processor PROD +- alertingProfile: CD_data-deletion-processor/alerting-profile/CDdata-deletion-processor-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDdata-deletion-processor-PROD.CN-Prod: +- name: CD_data-deletion-processor PROD +- alertingProfile: CD_data-deletion-processor/alerting-profile/CDdata-deletion-processor-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdata-deletion-processor-E2E: +- name: CD_data-deletion-processor E2E +- alertingProfile: CD_data-deletion-processor/alerting-profile/CDdata-deletion-processor-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdata-deletion-processor-E2E.EMEA-Prod: +- name: CD_data-deletion-processor E2E +- alertingProfile: CD_data-deletion-processor/alerting-profile/CDdata-deletion-processor-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDdata-deletion-processor-E2E.NA-Prod: +- name: CD_data-deletion-processor E2E +- alertingProfile: CD_data-deletion-processor/alerting-profile/CDdata-deletion-processor-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDdata-deletion-processor-E2E.CN-Prod: +- name: CD_data-deletion-processor E2E +- alertingProfile: CD_data-deletion-processor/alerting-profile/CDdata-deletion-processor-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdata-deletion-processor-INT: +- name: CD_data-deletion-processor INT +- alertingProfile: CD_data-deletion-processor/alerting-profile/CDdata-deletion-processor-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdata-deletion-processor-INT.EMEA-PreProd: +- name: CD_data-deletion-processor INT +- alertingProfile: CD_data-deletion-processor/alerting-profile/CDdata-deletion-processor-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDdata-deletion-processor-INT.NA-PreProd: +- name: CD_data-deletion-processor INT +- alertingProfile: CD_data-deletion-processor/alerting-profile/CDdata-deletion-processor-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDdata-deletion-processor-INT.CN-PreProd: +- name: CD_data-deletion-processor INT +- alertingProfile: CD_data-deletion-processor/alerting-profile/CDdata-deletion-processor-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_data-deletion-processor/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_data-deletion-processor/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_data-deletion-processor/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_data-deletion-processor/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_data-deletion-processor/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_data-deletion-processor/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_data-deletion-processor/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_data-deletion-processor/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..3b7876b4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_data-deletion-processor/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- data-deletion-processor: default.json + +data-deletion-processor: +- name: CD_data-deletion-processor - +- mzName: CD_data-deletion-processor/management-zone/CDdata-deletion-processor.name +- mzId: CD_data-deletion-processor/management-zone/CDdata-deletion-processor.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-comms-provider-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..dd142969 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDdealer-comms-provider-service-PROD: default.json +- CDdealer-comms-provider-service-E2E: default.json +- CDdealer-comms-provider-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-comms-provider-service-PROD: +- name: CD_dealer-comms-provider-service PROD +- tag: dealer-comms-provider-service +- mzId: CD_dealer-comms-provider-service/management-zone/CDdealer-comms-provider-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDdealer-comms-provider-service-PROD.EMEA-Prod: +- name: CD_dealer-comms-provider-service PROD +- tag: dealer-comms-provider-service +- mzId: CD_dealer-comms-provider-service/management-zone/CDdealer-comms-provider-service.id +- env: PROD +- skipDeployment: "false" +CDdealer-comms-provider-service-PROD.NA-Prod: +- name: CD_dealer-comms-provider-service PROD +- tag: dealer-comms-provider-service +- mzId: CD_dealer-comms-provider-service/management-zone/CDdealer-comms-provider-service.id +- env: PROD +- skipDeployment: "false" +CDdealer-comms-provider-service-PROD.CN-Prod: +- name: CD_dealer-comms-provider-service PROD +- tag: dealer-comms-provider-service +- mzId: CD_dealer-comms-provider-service/management-zone/CDdealer-comms-provider-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-comms-provider-service-E2E: +- name: CD_dealer-comms-provider-service E2E +- tag: dealer-comms-provider-service +- mzId: CD_dealer-comms-provider-service/management-zone/CDdealer-comms-provider-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDdealer-comms-provider-service-E2E.EMEA-Prod: +- name: CD_dealer-comms-provider-service E2E +- tag: dealer-comms-provider-service +- mzId: CD_dealer-comms-provider-service/management-zone/CDdealer-comms-provider-service.id +- env: E2E +- skipDeployment: "false" +CDdealer-comms-provider-service-E2E.NA-Prod: +- name: CD_dealer-comms-provider-service E2E +- tag: dealer-comms-provider-service +- mzId: CD_dealer-comms-provider-service/management-zone/CDdealer-comms-provider-service.id +- env: E2E +- skipDeployment: "false" +CDdealer-comms-provider-service-E2E.CN-Prod: +- name: CD_dealer-comms-provider-service E2E +- tag: dealer-comms-provider-service +- mzId: CD_dealer-comms-provider-service/management-zone/CDdealer-comms-provider-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-comms-provider-service-INT: +- name: CD_dealer-comms-provider-service INT +- tag: dealer-comms-provider-service +- mzId: CD_dealer-comms-provider-service/management-zone/CDdealer-comms-provider-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDdealer-comms-provider-service-INT.EMEA-PreProd: +- name: CD_dealer-comms-provider-service INT +- tag: dealer-comms-provider-service +- mzId: CD_dealer-comms-provider-service/management-zone/CDdealer-comms-provider-service.id +- env: INT +- skipDeployment: "false" +CDdealer-comms-provider-service-INT.NA-PreProd: +- name: CD_dealer-comms-provider-service INT +- tag: dealer-comms-provider-service +- mzId: CD_dealer-comms-provider-service/management-zone/CDdealer-comms-provider-service.id +- env: INT +- skipDeployment: "false" +CDdealer-comms-provider-service-INT.CN-PreProd: +- name: CD_dealer-comms-provider-service INT +- tag: dealer-comms-provider-service +- mzId: CD_dealer-comms-provider-service/management-zone/CDdealer-comms-provider-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-comms-provider-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-comms-provider-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-comms-provider-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-comms-provider-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-comms-provider-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-comms-provider-service/dashboard/README.md b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-comms-provider-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..5751bde3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDdealer-comms-provider-service-PROD-E2E: defaultPRODE2E.json +- CDdealer-comms-provider-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDdealer-comms-provider-service-PROD-E2E: +- name: CD_dealer-comms-provider-service PROD +- mzName: CD_dealer-comms-provider-service/management-zone/CDdealer-comms-provider-service.name +- mzId: CD_dealer-comms-provider-service/management-zone/CDdealer-comms-provider-service.id +- skipDeployment: "true" +#Configuration +CDdealer-comms-provider-service-PROD-E2E.EMEA-Prod: +- name: CD_dealer-comms-provider-service PROD +- mzName: CD_dealer-comms-provider-service/management-zone/CDdealer-comms-provider-service.name +- mzId: CD_dealer-comms-provider-service/management-zone/CDdealer-comms-provider-service.id +- tag: dealer-comms-provider-service +- skipDeployment: "false" +CDdealer-comms-provider-service-PROD-E2E.NA-Prod: +- name: CD_dealer-comms-provider-service PROD +- mzName: CD_dealer-comms-provider-service/management-zone/CDdealer-comms-provider-service.name +- mzId: CD_dealer-comms-provider-service/management-zone/CDdealer-comms-provider-service.id +- tag: dealer-comms-provider-service +- skipDeployment: "false" +CDdealer-comms-provider-service-PROD-E2E.CN-Prod: +- name: CD_dealer-comms-provider-service PROD +- mzName: CD_dealer-comms-provider-service/management-zone/CDdealer-comms-provider-service.name +- mzId: CD_dealer-comms-provider-service/management-zone/CDdealer-comms-provider-service.id +- tag: dealer-comms-provider-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDdealer-comms-provider-service-INT-TEST: +- name: CD_dealer-comms-provider-service INT-TEST +- mzName: CD_dealer-comms-provider-service/management-zone/CDdealer-comms-provider-service.name +- mzId: CD_dealer-comms-provider-service/management-zone/CDdealer-comms-provider-service.id +- tag: dealer-comms-provider-service +- skipDeployment: "true" +#Configuration +CDdealer-comms-provider-service-INT-TEST.EMEA-PreProd: +- name: CD_dealer-comms-provider-service INT-TEST +- mzName: CD_dealer-comms-provider-service/management-zone/CDdealer-comms-provider-service.name +- mzId: CD_dealer-comms-provider-service/management-zone/CDdealer-comms-provider-service.id +- tag: dealer-comms-provider-service +- skipDeployment: "false" +CDdealer-comms-provider-service-INT-TEST.NA-PreProd: +- name: CD_dealer-comms-provider-service INT-TEST +- mzName: CD_dealer-comms-provider-service/management-zone/CDdealer-comms-provider-service.name +- mzId: CD_dealer-comms-provider-service/management-zone/CDdealer-comms-provider-service.id +- env: INT +- skipDeployment: "false" +CDdealer-comms-provider-service-INT-TEST.CN-PreProd: +- name: CD_dealer-comms-provider-service INT-TEST +- mzName: CD_dealer-comms-provider-service/management-zone/CDdealer-comms-provider-service.name +- mzId: CD_dealer-comms-provider-service/management-zone/CDdealer-comms-provider-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-comms-provider-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-comms-provider-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-comms-provider-service/management-zone/README.md b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_dealer-comms-provider-service/management-zone/default.json b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-comms-provider-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..18957220 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDdealer-comms-provider-service: default.json + +CDdealer-comms-provider-service: +- name: CD_dealer-comms-provider-service +- tag: dealer-comms-provider-service diff --git a/BMW-Dynatrace-config/CD_dealer-comms-provider-service/notification/README.md b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-comms-provider-service/notification/email.json b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-comms-provider-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-comms-provider-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/notification/notification.yaml new file mode 100644 index 00000000..f72cd3cd --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDdealer-comms-provider-service-PROD: msTeams.json +- CDdealer-comms-provider-service-E2E: msTeams.json +- CDdealer-comms-provider-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-comms-provider-service-PROD: +- name: CD_dealer-comms-provider-service PROD +- alertingProfile: CD_dealer-comms-provider-service/alerting-profile/CDdealer-comms-provider-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdealer-comms-provider-service-PROD.EMEA-Prod: +- name: CD_dealer-comms-provider-service PROD +- alertingProfile: CD_dealer-comms-provider-service/alerting-profile/CDdealer-comms-provider-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-comms-provider-service-PROD.NA-Prod: +- name: CD_dealer-comms-provider-service PROD +- alertingProfile: CD_dealer-comms-provider-service/alerting-profile/CDdealer-comms-provider-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-comms-provider-service-PROD.CN-Prod: +- name: CD_dealer-comms-provider-service PROD +- alertingProfile: CD_dealer-comms-provider-service/alerting-profile/CDdealer-comms-provider-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-comms-provider-service-E2E: +- name: CD_dealer-comms-provider-service E2E +- alertingProfile: CD_dealer-comms-provider-service/alerting-profile/CDdealer-comms-provider-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdealer-comms-provider-service-E2E.EMEA-Prod: +- name: CD_dealer-comms-provider-service E2E +- alertingProfile: CD_dealer-comms-provider-service/alerting-profile/CDdealer-comms-provider-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-comms-provider-service-E2E.NA-Prod: +- name: CD_dealer-comms-provider-service E2E +- alertingProfile: CD_dealer-comms-provider-service/alerting-profile/CDdealer-comms-provider-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-comms-provider-service-E2E.CN-Prod: +- name: CD_dealer-comms-provider-service E2E +- alertingProfile: CD_dealer-comms-provider-service/alerting-profile/CDdealer-comms-provider-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-comms-provider-service-INT: +- name: CD_dealer-comms-provider-service INT +- alertingProfile: CD_dealer-comms-provider-service/alerting-profile/CDdealer-comms-provider-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdealer-comms-provider-service-INT.EMEA-PreProd: +- name: CD_dealer-comms-provider-service INT +- alertingProfile: CD_dealer-comms-provider-service/alerting-profile/CDdealer-comms-provider-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-comms-provider-service-INT.NA-PreProd: +- name: CD_dealer-comms-provider-service INT +- alertingProfile: CD_dealer-comms-provider-service/alerting-profile/CDdealer-comms-provider-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-comms-provider-service-INT.CN-PreProd: +- name: CD_dealer-comms-provider-service INT +- alertingProfile: CD_dealer-comms-provider-service/alerting-profile/CDdealer-comms-provider-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-comms-provider-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-comms-provider-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-comms-provider-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..e567c341 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- dealer-comms-provider-service: default.json + +dealer-comms-provider-service: +- name: CD_dealer-comms-provider-service - +- mzName: CD_dealer-comms-provider-service/management-zone/CDdealer-comms-provider-service.name +- mzId: CD_dealer-comms-provider-service/management-zone/CDdealer-comms-provider-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-data-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_dealer-data-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..c299c8b3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-data-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDdealer-data-service-PROD: default.json +- CDdealer-data-service-E2E: default.json +- CDdealer-data-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-data-service-PROD: +- name: CD_dealer-data-service PROD +- tag: dealer-data-service +- mzId: CD_dealer-data-service/management-zone/CDdealer-data-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDdealer-data-service-PROD.EMEA-Prod: +- name: CD_dealer-data-service PROD +- tag: dealer-data-service +- mzId: CD_dealer-data-service/management-zone/CDdealer-data-service.id +- env: PROD +- skipDeployment: "false" +CDdealer-data-service-PROD.NA-Prod: +- name: CD_dealer-data-service PROD +- tag: dealer-data-service +- mzId: CD_dealer-data-service/management-zone/CDdealer-data-service.id +- env: PROD +- skipDeployment: "false" +CDdealer-data-service-PROD.CN-Prod: +- name: CD_dealer-data-service PROD +- tag: dealer-data-service +- mzId: CD_dealer-data-service/management-zone/CDdealer-data-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-data-service-E2E: +- name: CD_dealer-data-service E2E +- tag: dealer-data-service +- mzId: CD_dealer-data-service/management-zone/CDdealer-data-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDdealer-data-service-E2E.EMEA-Prod: +- name: CD_dealer-data-service E2E +- tag: dealer-data-service +- mzId: CD_dealer-data-service/management-zone/CDdealer-data-service.id +- env: E2E +- skipDeployment: "false" +CDdealer-data-service-E2E.NA-Prod: +- name: CD_dealer-data-service E2E +- tag: dealer-data-service +- mzId: CD_dealer-data-service/management-zone/CDdealer-data-service.id +- env: E2E +- skipDeployment: "false" +CDdealer-data-service-E2E.CN-Prod: +- name: CD_dealer-data-service E2E +- tag: dealer-data-service +- mzId: CD_dealer-data-service/management-zone/CDdealer-data-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-data-service-INT: +- name: CD_dealer-data-service INT +- tag: dealer-data-service +- mzId: CD_dealer-data-service/management-zone/CDdealer-data-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDdealer-data-service-INT.EMEA-PreProd: +- name: CD_dealer-data-service INT +- tag: dealer-data-service +- mzId: CD_dealer-data-service/management-zone/CDdealer-data-service.id +- env: INT +- skipDeployment: "false" +CDdealer-data-service-INT.NA-PreProd: +- name: CD_dealer-data-service INT +- tag: dealer-data-service +- mzId: CD_dealer-data-service/management-zone/CDdealer-data-service.id +- env: INT +- skipDeployment: "false" +CDdealer-data-service-INT.CN-PreProd: +- name: CD_dealer-data-service INT +- tag: dealer-data-service +- mzId: CD_dealer-data-service/management-zone/CDdealer-data-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-data-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_dealer-data-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-data-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-data-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_dealer-data-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-data-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-data-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_dealer-data-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-data-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-data-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_dealer-data-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-data-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-data-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_dealer-data-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-data-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-data-service/dashboard/README.md b/BMW-Dynatrace-config/CD_dealer-data-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-data-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-data-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_dealer-data-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..127306d8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-data-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDdealer-data-service-PROD-E2E: defaultPRODE2E.json +- CDdealer-data-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDdealer-data-service-PROD-E2E: +- name: CD_dealer-data-service PROD +- mzName: CD_dealer-data-service/management-zone/CDdealer-data-service.name +- mzId: CD_dealer-data-service/management-zone/CDdealer-data-service.id +- skipDeployment: "true" +#Configuration +CDdealer-data-service-PROD-E2E.EMEA-Prod: +- name: CD_dealer-data-service PROD +- mzName: CD_dealer-data-service/management-zone/CDdealer-data-service.name +- mzId: CD_dealer-data-service/management-zone/CDdealer-data-service.id +- tag: dealer-data-service +- skipDeployment: "false" +CDdealer-data-service-PROD-E2E.NA-Prod: +- name: CD_dealer-data-service PROD +- mzName: CD_dealer-data-service/management-zone/CDdealer-data-service.name +- mzId: CD_dealer-data-service/management-zone/CDdealer-data-service.id +- tag: dealer-data-service +- skipDeployment: "false" +CDdealer-data-service-PROD-E2E.CN-Prod: +- name: CD_dealer-data-service PROD +- mzName: CD_dealer-data-service/management-zone/CDdealer-data-service.name +- mzId: CD_dealer-data-service/management-zone/CDdealer-data-service.id +- tag: dealer-data-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDdealer-data-service-INT-TEST: +- name: CD_dealer-data-service INT-TEST +- mzName: CD_dealer-data-service/management-zone/CDdealer-data-service.name +- mzId: CD_dealer-data-service/management-zone/CDdealer-data-service.id +- tag: dealer-data-service +- skipDeployment: "true" +#Configuration +CDdealer-data-service-INT-TEST.EMEA-PreProd: +- name: CD_dealer-data-service INT-TEST +- mzName: CD_dealer-data-service/management-zone/CDdealer-data-service.name +- mzId: CD_dealer-data-service/management-zone/CDdealer-data-service.id +- tag: dealer-data-service +- skipDeployment: "false" +CDdealer-data-service-INT-TEST.NA-PreProd: +- name: CD_dealer-data-service INT-TEST +- mzName: CD_dealer-data-service/management-zone/CDdealer-data-service.name +- mzId: CD_dealer-data-service/management-zone/CDdealer-data-service.id +- env: INT +- skipDeployment: "false" +CDdealer-data-service-INT-TEST.CN-PreProd: +- name: CD_dealer-data-service INT-TEST +- mzName: CD_dealer-data-service/management-zone/CDdealer-data-service.name +- mzId: CD_dealer-data-service/management-zone/CDdealer-data-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-data-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_dealer-data-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-data-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-data-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_dealer-data-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-data-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-data-service/management-zone/README.md b/BMW-Dynatrace-config/CD_dealer-data-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-data-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_dealer-data-service/management-zone/default.json b/BMW-Dynatrace-config/CD_dealer-data-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-data-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-data-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_dealer-data-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..86cdda1c --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-data-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDdealer-data-service: default.json + +CDdealer-data-service: +- name: CD_dealer-data-service +- tag: dealer-data-service diff --git a/BMW-Dynatrace-config/CD_dealer-data-service/notification/README.md b/BMW-Dynatrace-config/CD_dealer-data-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-data-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-data-service/notification/email.json b/BMW-Dynatrace-config/CD_dealer-data-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-data-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-data-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_dealer-data-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-data-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-data-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_dealer-data-service/notification/notification.yaml new file mode 100644 index 00000000..0164b5b7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-data-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDdealer-data-service-PROD: msTeams.json +- CDdealer-data-service-E2E: msTeams.json +- CDdealer-data-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-data-service-PROD: +- name: CD_dealer-data-service PROD +- alertingProfile: CD_dealer-data-service/alerting-profile/CDdealer-data-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdealer-data-service-PROD.EMEA-Prod: +- name: CD_dealer-data-service PROD +- alertingProfile: CD_dealer-data-service/alerting-profile/CDdealer-data-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-data-service-PROD.NA-Prod: +- name: CD_dealer-data-service PROD +- alertingProfile: CD_dealer-data-service/alerting-profile/CDdealer-data-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-data-service-PROD.CN-Prod: +- name: CD_dealer-data-service PROD +- alertingProfile: CD_dealer-data-service/alerting-profile/CDdealer-data-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-data-service-E2E: +- name: CD_dealer-data-service E2E +- alertingProfile: CD_dealer-data-service/alerting-profile/CDdealer-data-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdealer-data-service-E2E.EMEA-Prod: +- name: CD_dealer-data-service E2E +- alertingProfile: CD_dealer-data-service/alerting-profile/CDdealer-data-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-data-service-E2E.NA-Prod: +- name: CD_dealer-data-service E2E +- alertingProfile: CD_dealer-data-service/alerting-profile/CDdealer-data-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-data-service-E2E.CN-Prod: +- name: CD_dealer-data-service E2E +- alertingProfile: CD_dealer-data-service/alerting-profile/CDdealer-data-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-data-service-INT: +- name: CD_dealer-data-service INT +- alertingProfile: CD_dealer-data-service/alerting-profile/CDdealer-data-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdealer-data-service-INT.EMEA-PreProd: +- name: CD_dealer-data-service INT +- alertingProfile: CD_dealer-data-service/alerting-profile/CDdealer-data-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-data-service-INT.NA-PreProd: +- name: CD_dealer-data-service INT +- alertingProfile: CD_dealer-data-service/alerting-profile/CDdealer-data-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-data-service-INT.CN-PreProd: +- name: CD_dealer-data-service INT +- alertingProfile: CD_dealer-data-service/alerting-profile/CDdealer-data-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-data-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_dealer-data-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-data-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-data-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_dealer-data-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-data-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-data-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_dealer-data-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..db3e8e0f --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-data-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- dealer-data-service: default.json + +dealer-data-service: +- name: CD_dealer-data-service - +- mzName: CD_dealer-data-service/management-zone/CDdealer-data-service.name +- mzId: CD_dealer-data-service/management-zone/CDdealer-data-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..bbdb4661 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDdealer-payments-invoice-service-PROD: default.json +- CDdealer-payments-invoice-service-E2E: default.json +- CDdealer-payments-invoice-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-payments-invoice-service-PROD: +- name: CD_dealer-payments-invoice-service PROD +- tag: dealer-payments-invoice-service +- mzId: CD_dealer-payments-invoice-service/management-zone/CDdealer-payments-invoice-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDdealer-payments-invoice-service-PROD.EMEA-Prod: +- name: CD_dealer-payments-invoice-service PROD +- tag: dealer-payments-invoice-service +- mzId: CD_dealer-payments-invoice-service/management-zone/CDdealer-payments-invoice-service.id +- env: PROD +- skipDeployment: "false" +CDdealer-payments-invoice-service-PROD.NA-Prod: +- name: CD_dealer-payments-invoice-service PROD +- tag: dealer-payments-invoice-service +- mzId: CD_dealer-payments-invoice-service/management-zone/CDdealer-payments-invoice-service.id +- env: PROD +- skipDeployment: "false" +CDdealer-payments-invoice-service-PROD.CN-Prod: +- name: CD_dealer-payments-invoice-service PROD +- tag: dealer-payments-invoice-service +- mzId: CD_dealer-payments-invoice-service/management-zone/CDdealer-payments-invoice-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-payments-invoice-service-E2E: +- name: CD_dealer-payments-invoice-service E2E +- tag: dealer-payments-invoice-service +- mzId: CD_dealer-payments-invoice-service/management-zone/CDdealer-payments-invoice-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDdealer-payments-invoice-service-E2E.EMEA-Prod: +- name: CD_dealer-payments-invoice-service E2E +- tag: dealer-payments-invoice-service +- mzId: CD_dealer-payments-invoice-service/management-zone/CDdealer-payments-invoice-service.id +- env: E2E +- skipDeployment: "false" +CDdealer-payments-invoice-service-E2E.NA-Prod: +- name: CD_dealer-payments-invoice-service E2E +- tag: dealer-payments-invoice-service +- mzId: CD_dealer-payments-invoice-service/management-zone/CDdealer-payments-invoice-service.id +- env: E2E +- skipDeployment: "false" +CDdealer-payments-invoice-service-E2E.CN-Prod: +- name: CD_dealer-payments-invoice-service E2E +- tag: dealer-payments-invoice-service +- mzId: CD_dealer-payments-invoice-service/management-zone/CDdealer-payments-invoice-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-payments-invoice-service-INT: +- name: CD_dealer-payments-invoice-service INT +- tag: dealer-payments-invoice-service +- mzId: CD_dealer-payments-invoice-service/management-zone/CDdealer-payments-invoice-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDdealer-payments-invoice-service-INT.EMEA-PreProd: +- name: CD_dealer-payments-invoice-service INT +- tag: dealer-payments-invoice-service +- mzId: CD_dealer-payments-invoice-service/management-zone/CDdealer-payments-invoice-service.id +- env: INT +- skipDeployment: "false" +CDdealer-payments-invoice-service-INT.NA-PreProd: +- name: CD_dealer-payments-invoice-service INT +- tag: dealer-payments-invoice-service +- mzId: CD_dealer-payments-invoice-service/management-zone/CDdealer-payments-invoice-service.id +- env: INT +- skipDeployment: "false" +CDdealer-payments-invoice-service-INT.CN-PreProd: +- name: CD_dealer-payments-invoice-service INT +- tag: dealer-payments-invoice-service +- mzId: CD_dealer-payments-invoice-service/management-zone/CDdealer-payments-invoice-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/dashboard/README.md b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..f34927ab --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDdealer-payments-invoice-service-PROD-E2E: defaultPRODE2E.json +- CDdealer-payments-invoice-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDdealer-payments-invoice-service-PROD-E2E: +- name: CD_dealer-payments-invoice-service PROD +- mzName: CD_dealer-payments-invoice-service/management-zone/CDdealer-payments-invoice-service.name +- mzId: CD_dealer-payments-invoice-service/management-zone/CDdealer-payments-invoice-service.id +- skipDeployment: "true" +#Configuration +CDdealer-payments-invoice-service-PROD-E2E.EMEA-Prod: +- name: CD_dealer-payments-invoice-service PROD +- mzName: CD_dealer-payments-invoice-service/management-zone/CDdealer-payments-invoice-service.name +- mzId: CD_dealer-payments-invoice-service/management-zone/CDdealer-payments-invoice-service.id +- tag: dealer-payments-invoice-service +- skipDeployment: "false" +CDdealer-payments-invoice-service-PROD-E2E.NA-Prod: +- name: CD_dealer-payments-invoice-service PROD +- mzName: CD_dealer-payments-invoice-service/management-zone/CDdealer-payments-invoice-service.name +- mzId: CD_dealer-payments-invoice-service/management-zone/CDdealer-payments-invoice-service.id +- tag: dealer-payments-invoice-service +- skipDeployment: "false" +CDdealer-payments-invoice-service-PROD-E2E.CN-Prod: +- name: CD_dealer-payments-invoice-service PROD +- mzName: CD_dealer-payments-invoice-service/management-zone/CDdealer-payments-invoice-service.name +- mzId: CD_dealer-payments-invoice-service/management-zone/CDdealer-payments-invoice-service.id +- tag: dealer-payments-invoice-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDdealer-payments-invoice-service-INT-TEST: +- name: CD_dealer-payments-invoice-service INT-TEST +- mzName: CD_dealer-payments-invoice-service/management-zone/CDdealer-payments-invoice-service.name +- mzId: CD_dealer-payments-invoice-service/management-zone/CDdealer-payments-invoice-service.id +- tag: dealer-payments-invoice-service +- skipDeployment: "true" +#Configuration +CDdealer-payments-invoice-service-INT-TEST.EMEA-PreProd: +- name: CD_dealer-payments-invoice-service INT-TEST +- mzName: CD_dealer-payments-invoice-service/management-zone/CDdealer-payments-invoice-service.name +- mzId: CD_dealer-payments-invoice-service/management-zone/CDdealer-payments-invoice-service.id +- tag: dealer-payments-invoice-service +- skipDeployment: "false" +CDdealer-payments-invoice-service-INT-TEST.NA-PreProd: +- name: CD_dealer-payments-invoice-service INT-TEST +- mzName: CD_dealer-payments-invoice-service/management-zone/CDdealer-payments-invoice-service.name +- mzId: CD_dealer-payments-invoice-service/management-zone/CDdealer-payments-invoice-service.id +- env: INT +- skipDeployment: "false" +CDdealer-payments-invoice-service-INT-TEST.CN-PreProd: +- name: CD_dealer-payments-invoice-service INT-TEST +- mzName: CD_dealer-payments-invoice-service/management-zone/CDdealer-payments-invoice-service.name +- mzId: CD_dealer-payments-invoice-service/management-zone/CDdealer-payments-invoice-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/management-zone/README.md b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/management-zone/default.json b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..7e85792f --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDdealer-payments-invoice-service: default.json + +CDdealer-payments-invoice-service: +- name: CD_dealer-payments-invoice-service +- tag: dealer-payments-invoice-service diff --git a/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/notification/README.md b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/notification/email.json b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/notification/notification.yaml new file mode 100644 index 00000000..b27ce99c --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDdealer-payments-invoice-service-PROD: msTeams.json +- CDdealer-payments-invoice-service-E2E: msTeams.json +- CDdealer-payments-invoice-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-payments-invoice-service-PROD: +- name: CD_dealer-payments-invoice-service PROD +- alertingProfile: CD_dealer-payments-invoice-service/alerting-profile/CDdealer-payments-invoice-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdealer-payments-invoice-service-PROD.EMEA-Prod: +- name: CD_dealer-payments-invoice-service PROD +- alertingProfile: CD_dealer-payments-invoice-service/alerting-profile/CDdealer-payments-invoice-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-payments-invoice-service-PROD.NA-Prod: +- name: CD_dealer-payments-invoice-service PROD +- alertingProfile: CD_dealer-payments-invoice-service/alerting-profile/CDdealer-payments-invoice-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-payments-invoice-service-PROD.CN-Prod: +- name: CD_dealer-payments-invoice-service PROD +- alertingProfile: CD_dealer-payments-invoice-service/alerting-profile/CDdealer-payments-invoice-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-payments-invoice-service-E2E: +- name: CD_dealer-payments-invoice-service E2E +- alertingProfile: CD_dealer-payments-invoice-service/alerting-profile/CDdealer-payments-invoice-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdealer-payments-invoice-service-E2E.EMEA-Prod: +- name: CD_dealer-payments-invoice-service E2E +- alertingProfile: CD_dealer-payments-invoice-service/alerting-profile/CDdealer-payments-invoice-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-payments-invoice-service-E2E.NA-Prod: +- name: CD_dealer-payments-invoice-service E2E +- alertingProfile: CD_dealer-payments-invoice-service/alerting-profile/CDdealer-payments-invoice-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-payments-invoice-service-E2E.CN-Prod: +- name: CD_dealer-payments-invoice-service E2E +- alertingProfile: CD_dealer-payments-invoice-service/alerting-profile/CDdealer-payments-invoice-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-payments-invoice-service-INT: +- name: CD_dealer-payments-invoice-service INT +- alertingProfile: CD_dealer-payments-invoice-service/alerting-profile/CDdealer-payments-invoice-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdealer-payments-invoice-service-INT.EMEA-PreProd: +- name: CD_dealer-payments-invoice-service INT +- alertingProfile: CD_dealer-payments-invoice-service/alerting-profile/CDdealer-payments-invoice-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-payments-invoice-service-INT.NA-PreProd: +- name: CD_dealer-payments-invoice-service INT +- alertingProfile: CD_dealer-payments-invoice-service/alerting-profile/CDdealer-payments-invoice-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-payments-invoice-service-INT.CN-PreProd: +- name: CD_dealer-payments-invoice-service INT +- alertingProfile: CD_dealer-payments-invoice-service/alerting-profile/CDdealer-payments-invoice-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..238e55ec --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- dealer-payments-invoice-service: default.json + +dealer-payments-invoice-service: +- name: CD_dealer-payments-invoice-service - +- mzName: CD_dealer-payments-invoice-service/management-zone/CDdealer-payments-invoice-service.name +- mzId: CD_dealer-payments-invoice-service/management-zone/CDdealer-payments-invoice-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-notification-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..418b2617 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDdealer-payments-notification-service-PROD: default.json +- CDdealer-payments-notification-service-E2E: default.json +- CDdealer-payments-notification-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-payments-notification-service-PROD: +- name: CD_dealer-payments-notification-service PROD +- tag: dealer-payments-notification-service +- mzId: CD_dealer-payments-notification-service/management-zone/CDdealer-payments-notification-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDdealer-payments-notification-service-PROD.EMEA-Prod: +- name: CD_dealer-payments-notification-service PROD +- tag: dealer-payments-notification-service +- mzId: CD_dealer-payments-notification-service/management-zone/CDdealer-payments-notification-service.id +- env: PROD +- skipDeployment: "false" +CDdealer-payments-notification-service-PROD.NA-Prod: +- name: CD_dealer-payments-notification-service PROD +- tag: dealer-payments-notification-service +- mzId: CD_dealer-payments-notification-service/management-zone/CDdealer-payments-notification-service.id +- env: PROD +- skipDeployment: "false" +CDdealer-payments-notification-service-PROD.CN-Prod: +- name: CD_dealer-payments-notification-service PROD +- tag: dealer-payments-notification-service +- mzId: CD_dealer-payments-notification-service/management-zone/CDdealer-payments-notification-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-payments-notification-service-E2E: +- name: CD_dealer-payments-notification-service E2E +- tag: dealer-payments-notification-service +- mzId: CD_dealer-payments-notification-service/management-zone/CDdealer-payments-notification-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDdealer-payments-notification-service-E2E.EMEA-Prod: +- name: CD_dealer-payments-notification-service E2E +- tag: dealer-payments-notification-service +- mzId: CD_dealer-payments-notification-service/management-zone/CDdealer-payments-notification-service.id +- env: E2E +- skipDeployment: "false" +CDdealer-payments-notification-service-E2E.NA-Prod: +- name: CD_dealer-payments-notification-service E2E +- tag: dealer-payments-notification-service +- mzId: CD_dealer-payments-notification-service/management-zone/CDdealer-payments-notification-service.id +- env: E2E +- skipDeployment: "false" +CDdealer-payments-notification-service-E2E.CN-Prod: +- name: CD_dealer-payments-notification-service E2E +- tag: dealer-payments-notification-service +- mzId: CD_dealer-payments-notification-service/management-zone/CDdealer-payments-notification-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-payments-notification-service-INT: +- name: CD_dealer-payments-notification-service INT +- tag: dealer-payments-notification-service +- mzId: CD_dealer-payments-notification-service/management-zone/CDdealer-payments-notification-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDdealer-payments-notification-service-INT.EMEA-PreProd: +- name: CD_dealer-payments-notification-service INT +- tag: dealer-payments-notification-service +- mzId: CD_dealer-payments-notification-service/management-zone/CDdealer-payments-notification-service.id +- env: INT +- skipDeployment: "false" +CDdealer-payments-notification-service-INT.NA-PreProd: +- name: CD_dealer-payments-notification-service INT +- tag: dealer-payments-notification-service +- mzId: CD_dealer-payments-notification-service/management-zone/CDdealer-payments-notification-service.id +- env: INT +- skipDeployment: "false" +CDdealer-payments-notification-service-INT.CN-PreProd: +- name: CD_dealer-payments-notification-service INT +- tag: dealer-payments-notification-service +- mzId: CD_dealer-payments-notification-service/management-zone/CDdealer-payments-notification-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-notification-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-notification-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-notification-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-notification-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-notification-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-notification-service/dashboard/README.md b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-notification-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..f4ad8bf8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDdealer-payments-notification-service-PROD-E2E: defaultPRODE2E.json +- CDdealer-payments-notification-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDdealer-payments-notification-service-PROD-E2E: +- name: CD_dealer-payments-notification-service PROD +- mzName: CD_dealer-payments-notification-service/management-zone/CDdealer-payments-notification-service.name +- mzId: CD_dealer-payments-notification-service/management-zone/CDdealer-payments-notification-service.id +- skipDeployment: "true" +#Configuration +CDdealer-payments-notification-service-PROD-E2E.EMEA-Prod: +- name: CD_dealer-payments-notification-service PROD +- mzName: CD_dealer-payments-notification-service/management-zone/CDdealer-payments-notification-service.name +- mzId: CD_dealer-payments-notification-service/management-zone/CDdealer-payments-notification-service.id +- tag: dealer-payments-notification-service +- skipDeployment: "false" +CDdealer-payments-notification-service-PROD-E2E.NA-Prod: +- name: CD_dealer-payments-notification-service PROD +- mzName: CD_dealer-payments-notification-service/management-zone/CDdealer-payments-notification-service.name +- mzId: CD_dealer-payments-notification-service/management-zone/CDdealer-payments-notification-service.id +- tag: dealer-payments-notification-service +- skipDeployment: "false" +CDdealer-payments-notification-service-PROD-E2E.CN-Prod: +- name: CD_dealer-payments-notification-service PROD +- mzName: CD_dealer-payments-notification-service/management-zone/CDdealer-payments-notification-service.name +- mzId: CD_dealer-payments-notification-service/management-zone/CDdealer-payments-notification-service.id +- tag: dealer-payments-notification-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDdealer-payments-notification-service-INT-TEST: +- name: CD_dealer-payments-notification-service INT-TEST +- mzName: CD_dealer-payments-notification-service/management-zone/CDdealer-payments-notification-service.name +- mzId: CD_dealer-payments-notification-service/management-zone/CDdealer-payments-notification-service.id +- tag: dealer-payments-notification-service +- skipDeployment: "true" +#Configuration +CDdealer-payments-notification-service-INT-TEST.EMEA-PreProd: +- name: CD_dealer-payments-notification-service INT-TEST +- mzName: CD_dealer-payments-notification-service/management-zone/CDdealer-payments-notification-service.name +- mzId: CD_dealer-payments-notification-service/management-zone/CDdealer-payments-notification-service.id +- tag: dealer-payments-notification-service +- skipDeployment: "false" +CDdealer-payments-notification-service-INT-TEST.NA-PreProd: +- name: CD_dealer-payments-notification-service INT-TEST +- mzName: CD_dealer-payments-notification-service/management-zone/CDdealer-payments-notification-service.name +- mzId: CD_dealer-payments-notification-service/management-zone/CDdealer-payments-notification-service.id +- env: INT +- skipDeployment: "false" +CDdealer-payments-notification-service-INT-TEST.CN-PreProd: +- name: CD_dealer-payments-notification-service INT-TEST +- mzName: CD_dealer-payments-notification-service/management-zone/CDdealer-payments-notification-service.name +- mzId: CD_dealer-payments-notification-service/management-zone/CDdealer-payments-notification-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-notification-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-notification-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-notification-service/management-zone/README.md b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_dealer-payments-notification-service/management-zone/default.json b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-notification-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..80c69647 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDdealer-payments-notification-service: default.json + +CDdealer-payments-notification-service: +- name: CD_dealer-payments-notification-service +- tag: dealer-payments-notification-service diff --git a/BMW-Dynatrace-config/CD_dealer-payments-notification-service/notification/README.md b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-notification-service/notification/email.json b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-notification-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-notification-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/notification/notification.yaml new file mode 100644 index 00000000..d07e7a1a --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDdealer-payments-notification-service-PROD: msTeams.json +- CDdealer-payments-notification-service-E2E: msTeams.json +- CDdealer-payments-notification-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-payments-notification-service-PROD: +- name: CD_dealer-payments-notification-service PROD +- alertingProfile: CD_dealer-payments-notification-service/alerting-profile/CDdealer-payments-notification-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdealer-payments-notification-service-PROD.EMEA-Prod: +- name: CD_dealer-payments-notification-service PROD +- alertingProfile: CD_dealer-payments-notification-service/alerting-profile/CDdealer-payments-notification-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-payments-notification-service-PROD.NA-Prod: +- name: CD_dealer-payments-notification-service PROD +- alertingProfile: CD_dealer-payments-notification-service/alerting-profile/CDdealer-payments-notification-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-payments-notification-service-PROD.CN-Prod: +- name: CD_dealer-payments-notification-service PROD +- alertingProfile: CD_dealer-payments-notification-service/alerting-profile/CDdealer-payments-notification-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-payments-notification-service-E2E: +- name: CD_dealer-payments-notification-service E2E +- alertingProfile: CD_dealer-payments-notification-service/alerting-profile/CDdealer-payments-notification-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdealer-payments-notification-service-E2E.EMEA-Prod: +- name: CD_dealer-payments-notification-service E2E +- alertingProfile: CD_dealer-payments-notification-service/alerting-profile/CDdealer-payments-notification-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-payments-notification-service-E2E.NA-Prod: +- name: CD_dealer-payments-notification-service E2E +- alertingProfile: CD_dealer-payments-notification-service/alerting-profile/CDdealer-payments-notification-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-payments-notification-service-E2E.CN-Prod: +- name: CD_dealer-payments-notification-service E2E +- alertingProfile: CD_dealer-payments-notification-service/alerting-profile/CDdealer-payments-notification-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-payments-notification-service-INT: +- name: CD_dealer-payments-notification-service INT +- alertingProfile: CD_dealer-payments-notification-service/alerting-profile/CDdealer-payments-notification-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdealer-payments-notification-service-INT.EMEA-PreProd: +- name: CD_dealer-payments-notification-service INT +- alertingProfile: CD_dealer-payments-notification-service/alerting-profile/CDdealer-payments-notification-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-payments-notification-service-INT.NA-PreProd: +- name: CD_dealer-payments-notification-service INT +- alertingProfile: CD_dealer-payments-notification-service/alerting-profile/CDdealer-payments-notification-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-payments-notification-service-INT.CN-PreProd: +- name: CD_dealer-payments-notification-service INT +- alertingProfile: CD_dealer-payments-notification-service/alerting-profile/CDdealer-payments-notification-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-notification-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-notification-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-notification-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..79a6cf65 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- dealer-payments-notification-service: default.json + +dealer-payments-notification-service: +- name: CD_dealer-payments-notification-service - +- mzName: CD_dealer-payments-notification-service/management-zone/CDdealer-payments-notification-service.name +- mzId: CD_dealer-payments-notification-service/management-zone/CDdealer-payments-notification-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_dealer-payments-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..20ac81f7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDdealer-payments-service-PROD: default.json +- CDdealer-payments-service-E2E: default.json +- CDdealer-payments-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-payments-service-PROD: +- name: CD_dealer-payments-service PROD +- tag: dealer-payments-service +- mzId: CD_dealer-payments-service/management-zone/CDdealer-payments-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDdealer-payments-service-PROD.EMEA-Prod: +- name: CD_dealer-payments-service PROD +- tag: dealer-payments-service +- mzId: CD_dealer-payments-service/management-zone/CDdealer-payments-service.id +- env: PROD +- skipDeployment: "false" +CDdealer-payments-service-PROD.NA-Prod: +- name: CD_dealer-payments-service PROD +- tag: dealer-payments-service +- mzId: CD_dealer-payments-service/management-zone/CDdealer-payments-service.id +- env: PROD +- skipDeployment: "false" +CDdealer-payments-service-PROD.CN-Prod: +- name: CD_dealer-payments-service PROD +- tag: dealer-payments-service +- mzId: CD_dealer-payments-service/management-zone/CDdealer-payments-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-payments-service-E2E: +- name: CD_dealer-payments-service E2E +- tag: dealer-payments-service +- mzId: CD_dealer-payments-service/management-zone/CDdealer-payments-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDdealer-payments-service-E2E.EMEA-Prod: +- name: CD_dealer-payments-service E2E +- tag: dealer-payments-service +- mzId: CD_dealer-payments-service/management-zone/CDdealer-payments-service.id +- env: E2E +- skipDeployment: "false" +CDdealer-payments-service-E2E.NA-Prod: +- name: CD_dealer-payments-service E2E +- tag: dealer-payments-service +- mzId: CD_dealer-payments-service/management-zone/CDdealer-payments-service.id +- env: E2E +- skipDeployment: "false" +CDdealer-payments-service-E2E.CN-Prod: +- name: CD_dealer-payments-service E2E +- tag: dealer-payments-service +- mzId: CD_dealer-payments-service/management-zone/CDdealer-payments-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-payments-service-INT: +- name: CD_dealer-payments-service INT +- tag: dealer-payments-service +- mzId: CD_dealer-payments-service/management-zone/CDdealer-payments-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDdealer-payments-service-INT.EMEA-PreProd: +- name: CD_dealer-payments-service INT +- tag: dealer-payments-service +- mzId: CD_dealer-payments-service/management-zone/CDdealer-payments-service.id +- env: INT +- skipDeployment: "false" +CDdealer-payments-service-INT.NA-PreProd: +- name: CD_dealer-payments-service INT +- tag: dealer-payments-service +- mzId: CD_dealer-payments-service/management-zone/CDdealer-payments-service.id +- env: INT +- skipDeployment: "false" +CDdealer-payments-service-INT.CN-PreProd: +- name: CD_dealer-payments-service INT +- tag: dealer-payments-service +- mzId: CD_dealer-payments-service/management-zone/CDdealer-payments-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_dealer-payments-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_dealer-payments-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_dealer-payments-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_dealer-payments-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_dealer-payments-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-service/dashboard/README.md b/BMW-Dynatrace-config/CD_dealer-payments-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_dealer-payments-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..02fc54ca --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDdealer-payments-service-PROD-E2E: defaultPRODE2E.json +- CDdealer-payments-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDdealer-payments-service-PROD-E2E: +- name: CD_dealer-payments-service PROD +- mzName: CD_dealer-payments-service/management-zone/CDdealer-payments-service.name +- mzId: CD_dealer-payments-service/management-zone/CDdealer-payments-service.id +- skipDeployment: "true" +#Configuration +CDdealer-payments-service-PROD-E2E.EMEA-Prod: +- name: CD_dealer-payments-service PROD +- mzName: CD_dealer-payments-service/management-zone/CDdealer-payments-service.name +- mzId: CD_dealer-payments-service/management-zone/CDdealer-payments-service.id +- tag: dealer-payments-service +- skipDeployment: "false" +CDdealer-payments-service-PROD-E2E.NA-Prod: +- name: CD_dealer-payments-service PROD +- mzName: CD_dealer-payments-service/management-zone/CDdealer-payments-service.name +- mzId: CD_dealer-payments-service/management-zone/CDdealer-payments-service.id +- tag: dealer-payments-service +- skipDeployment: "false" +CDdealer-payments-service-PROD-E2E.CN-Prod: +- name: CD_dealer-payments-service PROD +- mzName: CD_dealer-payments-service/management-zone/CDdealer-payments-service.name +- mzId: CD_dealer-payments-service/management-zone/CDdealer-payments-service.id +- tag: dealer-payments-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDdealer-payments-service-INT-TEST: +- name: CD_dealer-payments-service INT-TEST +- mzName: CD_dealer-payments-service/management-zone/CDdealer-payments-service.name +- mzId: CD_dealer-payments-service/management-zone/CDdealer-payments-service.id +- tag: dealer-payments-service +- skipDeployment: "true" +#Configuration +CDdealer-payments-service-INT-TEST.EMEA-PreProd: +- name: CD_dealer-payments-service INT-TEST +- mzName: CD_dealer-payments-service/management-zone/CDdealer-payments-service.name +- mzId: CD_dealer-payments-service/management-zone/CDdealer-payments-service.id +- tag: dealer-payments-service +- skipDeployment: "false" +CDdealer-payments-service-INT-TEST.NA-PreProd: +- name: CD_dealer-payments-service INT-TEST +- mzName: CD_dealer-payments-service/management-zone/CDdealer-payments-service.name +- mzId: CD_dealer-payments-service/management-zone/CDdealer-payments-service.id +- env: INT +- skipDeployment: "false" +CDdealer-payments-service-INT-TEST.CN-PreProd: +- name: CD_dealer-payments-service INT-TEST +- mzName: CD_dealer-payments-service/management-zone/CDdealer-payments-service.name +- mzId: CD_dealer-payments-service/management-zone/CDdealer-payments-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_dealer-payments-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_dealer-payments-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-service/management-zone/README.md b/BMW-Dynatrace-config/CD_dealer-payments-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_dealer-payments-service/management-zone/default.json b/BMW-Dynatrace-config/CD_dealer-payments-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_dealer-payments-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..24a6c036 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDdealer-payments-service: default.json + +CDdealer-payments-service: +- name: CD_dealer-payments-service +- tag: dealer-payments-service diff --git a/BMW-Dynatrace-config/CD_dealer-payments-service/notification/README.md b/BMW-Dynatrace-config/CD_dealer-payments-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-service/notification/email.json b/BMW-Dynatrace-config/CD_dealer-payments-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_dealer-payments-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_dealer-payments-service/notification/notification.yaml new file mode 100644 index 00000000..88cdbad0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDdealer-payments-service-PROD: msTeams.json +- CDdealer-payments-service-E2E: msTeams.json +- CDdealer-payments-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-payments-service-PROD: +- name: CD_dealer-payments-service PROD +- alertingProfile: CD_dealer-payments-service/alerting-profile/CDdealer-payments-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdealer-payments-service-PROD.EMEA-Prod: +- name: CD_dealer-payments-service PROD +- alertingProfile: CD_dealer-payments-service/alerting-profile/CDdealer-payments-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-payments-service-PROD.NA-Prod: +- name: CD_dealer-payments-service PROD +- alertingProfile: CD_dealer-payments-service/alerting-profile/CDdealer-payments-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-payments-service-PROD.CN-Prod: +- name: CD_dealer-payments-service PROD +- alertingProfile: CD_dealer-payments-service/alerting-profile/CDdealer-payments-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-payments-service-E2E: +- name: CD_dealer-payments-service E2E +- alertingProfile: CD_dealer-payments-service/alerting-profile/CDdealer-payments-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdealer-payments-service-E2E.EMEA-Prod: +- name: CD_dealer-payments-service E2E +- alertingProfile: CD_dealer-payments-service/alerting-profile/CDdealer-payments-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-payments-service-E2E.NA-Prod: +- name: CD_dealer-payments-service E2E +- alertingProfile: CD_dealer-payments-service/alerting-profile/CDdealer-payments-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-payments-service-E2E.CN-Prod: +- name: CD_dealer-payments-service E2E +- alertingProfile: CD_dealer-payments-service/alerting-profile/CDdealer-payments-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-payments-service-INT: +- name: CD_dealer-payments-service INT +- alertingProfile: CD_dealer-payments-service/alerting-profile/CDdealer-payments-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdealer-payments-service-INT.EMEA-PreProd: +- name: CD_dealer-payments-service INT +- alertingProfile: CD_dealer-payments-service/alerting-profile/CDdealer-payments-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-payments-service-INT.NA-PreProd: +- name: CD_dealer-payments-service INT +- alertingProfile: CD_dealer-payments-service/alerting-profile/CDdealer-payments-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-payments-service-INT.CN-PreProd: +- name: CD_dealer-payments-service INT +- alertingProfile: CD_dealer-payments-service/alerting-profile/CDdealer-payments-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_dealer-payments-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_dealer-payments-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_dealer-payments-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..3eefd3d2 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- dealer-payments-service: default.json + +dealer-payments-service: +- name: CD_dealer-payments-service - +- mzName: CD_dealer-payments-service/management-zone/CDdealer-payments-service.name +- mzId: CD_dealer-payments-service/management-zone/CDdealer-payments-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-search-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_dealer-search-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..19ce685e --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-search-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDdealer-search-service-PROD: default.json +- CDdealer-search-service-E2E: default.json +- CDdealer-search-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-search-service-PROD: +- name: CD_dealer-search-service PROD +- tag: dealer-search-service +- mzId: CD_dealer-search-service/management-zone/CDdealer-search-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDdealer-search-service-PROD.EMEA-Prod: +- name: CD_dealer-search-service PROD +- tag: dealer-search-service +- mzId: CD_dealer-search-service/management-zone/CDdealer-search-service.id +- env: PROD +- skipDeployment: "false" +CDdealer-search-service-PROD.NA-Prod: +- name: CD_dealer-search-service PROD +- tag: dealer-search-service +- mzId: CD_dealer-search-service/management-zone/CDdealer-search-service.id +- env: PROD +- skipDeployment: "false" +CDdealer-search-service-PROD.CN-Prod: +- name: CD_dealer-search-service PROD +- tag: dealer-search-service +- mzId: CD_dealer-search-service/management-zone/CDdealer-search-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-search-service-E2E: +- name: CD_dealer-search-service E2E +- tag: dealer-search-service +- mzId: CD_dealer-search-service/management-zone/CDdealer-search-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDdealer-search-service-E2E.EMEA-Prod: +- name: CD_dealer-search-service E2E +- tag: dealer-search-service +- mzId: CD_dealer-search-service/management-zone/CDdealer-search-service.id +- env: E2E +- skipDeployment: "false" +CDdealer-search-service-E2E.NA-Prod: +- name: CD_dealer-search-service E2E +- tag: dealer-search-service +- mzId: CD_dealer-search-service/management-zone/CDdealer-search-service.id +- env: E2E +- skipDeployment: "false" +CDdealer-search-service-E2E.CN-Prod: +- name: CD_dealer-search-service E2E +- tag: dealer-search-service +- mzId: CD_dealer-search-service/management-zone/CDdealer-search-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-search-service-INT: +- name: CD_dealer-search-service INT +- tag: dealer-search-service +- mzId: CD_dealer-search-service/management-zone/CDdealer-search-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDdealer-search-service-INT.EMEA-PreProd: +- name: CD_dealer-search-service INT +- tag: dealer-search-service +- mzId: CD_dealer-search-service/management-zone/CDdealer-search-service.id +- env: INT +- skipDeployment: "false" +CDdealer-search-service-INT.NA-PreProd: +- name: CD_dealer-search-service INT +- tag: dealer-search-service +- mzId: CD_dealer-search-service/management-zone/CDdealer-search-service.id +- env: INT +- skipDeployment: "false" +CDdealer-search-service-INT.CN-PreProd: +- name: CD_dealer-search-service INT +- tag: dealer-search-service +- mzId: CD_dealer-search-service/management-zone/CDdealer-search-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-search-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_dealer-search-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-search-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-search-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_dealer-search-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-search-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-search-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_dealer-search-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-search-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-search-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_dealer-search-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-search-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-search-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_dealer-search-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-search-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-search-service/dashboard/README.md b/BMW-Dynatrace-config/CD_dealer-search-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-search-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-search-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_dealer-search-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..18a45532 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-search-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDdealer-search-service-PROD-E2E: defaultPRODE2E.json +- CDdealer-search-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDdealer-search-service-PROD-E2E: +- name: CD_dealer-search-service PROD +- mzName: CD_dealer-search-service/management-zone/CDdealer-search-service.name +- mzId: CD_dealer-search-service/management-zone/CDdealer-search-service.id +- skipDeployment: "true" +#Configuration +CDdealer-search-service-PROD-E2E.EMEA-Prod: +- name: CD_dealer-search-service PROD +- mzName: CD_dealer-search-service/management-zone/CDdealer-search-service.name +- mzId: CD_dealer-search-service/management-zone/CDdealer-search-service.id +- tag: dealer-search-service +- skipDeployment: "false" +CDdealer-search-service-PROD-E2E.NA-Prod: +- name: CD_dealer-search-service PROD +- mzName: CD_dealer-search-service/management-zone/CDdealer-search-service.name +- mzId: CD_dealer-search-service/management-zone/CDdealer-search-service.id +- tag: dealer-search-service +- skipDeployment: "false" +CDdealer-search-service-PROD-E2E.CN-Prod: +- name: CD_dealer-search-service PROD +- mzName: CD_dealer-search-service/management-zone/CDdealer-search-service.name +- mzId: CD_dealer-search-service/management-zone/CDdealer-search-service.id +- tag: dealer-search-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDdealer-search-service-INT-TEST: +- name: CD_dealer-search-service INT-TEST +- mzName: CD_dealer-search-service/management-zone/CDdealer-search-service.name +- mzId: CD_dealer-search-service/management-zone/CDdealer-search-service.id +- tag: dealer-search-service +- skipDeployment: "true" +#Configuration +CDdealer-search-service-INT-TEST.EMEA-PreProd: +- name: CD_dealer-search-service INT-TEST +- mzName: CD_dealer-search-service/management-zone/CDdealer-search-service.name +- mzId: CD_dealer-search-service/management-zone/CDdealer-search-service.id +- tag: dealer-search-service +- skipDeployment: "false" +CDdealer-search-service-INT-TEST.NA-PreProd: +- name: CD_dealer-search-service INT-TEST +- mzName: CD_dealer-search-service/management-zone/CDdealer-search-service.name +- mzId: CD_dealer-search-service/management-zone/CDdealer-search-service.id +- env: INT +- skipDeployment: "false" +CDdealer-search-service-INT-TEST.CN-PreProd: +- name: CD_dealer-search-service INT-TEST +- mzName: CD_dealer-search-service/management-zone/CDdealer-search-service.name +- mzId: CD_dealer-search-service/management-zone/CDdealer-search-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-search-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_dealer-search-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-search-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-search-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_dealer-search-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-search-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-search-service/management-zone/README.md b/BMW-Dynatrace-config/CD_dealer-search-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-search-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_dealer-search-service/management-zone/default.json b/BMW-Dynatrace-config/CD_dealer-search-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-search-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-search-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_dealer-search-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..816fd6a0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-search-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDdealer-search-service: default.json + +CDdealer-search-service: +- name: CD_dealer-search-service +- tag: dealer-search-service diff --git a/BMW-Dynatrace-config/CD_dealer-search-service/notification/README.md b/BMW-Dynatrace-config/CD_dealer-search-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-search-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-search-service/notification/email.json b/BMW-Dynatrace-config/CD_dealer-search-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-search-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-search-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_dealer-search-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-search-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-search-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_dealer-search-service/notification/notification.yaml new file mode 100644 index 00000000..f1502ee8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-search-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDdealer-search-service-PROD: msTeams.json +- CDdealer-search-service-E2E: msTeams.json +- CDdealer-search-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-search-service-PROD: +- name: CD_dealer-search-service PROD +- alertingProfile: CD_dealer-search-service/alerting-profile/CDdealer-search-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdealer-search-service-PROD.EMEA-Prod: +- name: CD_dealer-search-service PROD +- alertingProfile: CD_dealer-search-service/alerting-profile/CDdealer-search-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-search-service-PROD.NA-Prod: +- name: CD_dealer-search-service PROD +- alertingProfile: CD_dealer-search-service/alerting-profile/CDdealer-search-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-search-service-PROD.CN-Prod: +- name: CD_dealer-search-service PROD +- alertingProfile: CD_dealer-search-service/alerting-profile/CDdealer-search-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-search-service-E2E: +- name: CD_dealer-search-service E2E +- alertingProfile: CD_dealer-search-service/alerting-profile/CDdealer-search-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdealer-search-service-E2E.EMEA-Prod: +- name: CD_dealer-search-service E2E +- alertingProfile: CD_dealer-search-service/alerting-profile/CDdealer-search-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-search-service-E2E.NA-Prod: +- name: CD_dealer-search-service E2E +- alertingProfile: CD_dealer-search-service/alerting-profile/CDdealer-search-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-search-service-E2E.CN-Prod: +- name: CD_dealer-search-service E2E +- alertingProfile: CD_dealer-search-service/alerting-profile/CDdealer-search-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-search-service-INT: +- name: CD_dealer-search-service INT +- alertingProfile: CD_dealer-search-service/alerting-profile/CDdealer-search-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdealer-search-service-INT.EMEA-PreProd: +- name: CD_dealer-search-service INT +- alertingProfile: CD_dealer-search-service/alerting-profile/CDdealer-search-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-search-service-INT.NA-PreProd: +- name: CD_dealer-search-service INT +- alertingProfile: CD_dealer-search-service/alerting-profile/CDdealer-search-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-search-service-INT.CN-PreProd: +- name: CD_dealer-search-service INT +- alertingProfile: CD_dealer-search-service/alerting-profile/CDdealer-search-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-search-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_dealer-search-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-search-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-search-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_dealer-search-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-search-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-search-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_dealer-search-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..53b618e1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-search-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- dealer-search-service: default.json + +dealer-search-service: +- name: CD_dealer-search-service - +- mzName: CD_dealer-search-service/management-zone/CDdealer-search-service.name +- mzId: CD_dealer-search-service/management-zone/CDdealer-search-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-services-composite-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_dealer-services-composite-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..14e114ed --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-services-composite-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDdealer-services-composite-service-PROD: default.json +- CDdealer-services-composite-service-E2E: default.json +- CDdealer-services-composite-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-services-composite-service-PROD: +- name: CD_dealer-services-composite-service PROD +- tag: dealer-services-composite-service +- mzId: CD_dealer-services-composite-service/management-zone/CDdealer-services-composite-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDdealer-services-composite-service-PROD.EMEA-Prod: +- name: CD_dealer-services-composite-service PROD +- tag: dealer-services-composite-service +- mzId: CD_dealer-services-composite-service/management-zone/CDdealer-services-composite-service.id +- env: PROD +- skipDeployment: "false" +CDdealer-services-composite-service-PROD.NA-Prod: +- name: CD_dealer-services-composite-service PROD +- tag: dealer-services-composite-service +- mzId: CD_dealer-services-composite-service/management-zone/CDdealer-services-composite-service.id +- env: PROD +- skipDeployment: "false" +CDdealer-services-composite-service-PROD.CN-Prod: +- name: CD_dealer-services-composite-service PROD +- tag: dealer-services-composite-service +- mzId: CD_dealer-services-composite-service/management-zone/CDdealer-services-composite-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-services-composite-service-E2E: +- name: CD_dealer-services-composite-service E2E +- tag: dealer-services-composite-service +- mzId: CD_dealer-services-composite-service/management-zone/CDdealer-services-composite-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDdealer-services-composite-service-E2E.EMEA-Prod: +- name: CD_dealer-services-composite-service E2E +- tag: dealer-services-composite-service +- mzId: CD_dealer-services-composite-service/management-zone/CDdealer-services-composite-service.id +- env: E2E +- skipDeployment: "false" +CDdealer-services-composite-service-E2E.NA-Prod: +- name: CD_dealer-services-composite-service E2E +- tag: dealer-services-composite-service +- mzId: CD_dealer-services-composite-service/management-zone/CDdealer-services-composite-service.id +- env: E2E +- skipDeployment: "false" +CDdealer-services-composite-service-E2E.CN-Prod: +- name: CD_dealer-services-composite-service E2E +- tag: dealer-services-composite-service +- mzId: CD_dealer-services-composite-service/management-zone/CDdealer-services-composite-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-services-composite-service-INT: +- name: CD_dealer-services-composite-service INT +- tag: dealer-services-composite-service +- mzId: CD_dealer-services-composite-service/management-zone/CDdealer-services-composite-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDdealer-services-composite-service-INT.EMEA-PreProd: +- name: CD_dealer-services-composite-service INT +- tag: dealer-services-composite-service +- mzId: CD_dealer-services-composite-service/management-zone/CDdealer-services-composite-service.id +- env: INT +- skipDeployment: "false" +CDdealer-services-composite-service-INT.NA-PreProd: +- name: CD_dealer-services-composite-service INT +- tag: dealer-services-composite-service +- mzId: CD_dealer-services-composite-service/management-zone/CDdealer-services-composite-service.id +- env: INT +- skipDeployment: "false" +CDdealer-services-composite-service-INT.CN-PreProd: +- name: CD_dealer-services-composite-service INT +- tag: dealer-services-composite-service +- mzId: CD_dealer-services-composite-service/management-zone/CDdealer-services-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-services-composite-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_dealer-services-composite-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-services-composite-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-services-composite-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_dealer-services-composite-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-services-composite-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-services-composite-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_dealer-services-composite-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-services-composite-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-services-composite-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_dealer-services-composite-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-services-composite-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-services-composite-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_dealer-services-composite-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-services-composite-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-services-composite-service/dashboard/README.md b/BMW-Dynatrace-config/CD_dealer-services-composite-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-services-composite-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-services-composite-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_dealer-services-composite-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..ae125b8d --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-services-composite-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDdealer-services-composite-service-PROD-E2E: defaultPRODE2E.json +- CDdealer-services-composite-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDdealer-services-composite-service-PROD-E2E: +- name: CD_dealer-services-composite-service PROD +- mzName: CD_dealer-services-composite-service/management-zone/CDdealer-services-composite-service.name +- mzId: CD_dealer-services-composite-service/management-zone/CDdealer-services-composite-service.id +- skipDeployment: "true" +#Configuration +CDdealer-services-composite-service-PROD-E2E.EMEA-Prod: +- name: CD_dealer-services-composite-service PROD +- mzName: CD_dealer-services-composite-service/management-zone/CDdealer-services-composite-service.name +- mzId: CD_dealer-services-composite-service/management-zone/CDdealer-services-composite-service.id +- tag: dealer-services-composite-service +- skipDeployment: "false" +CDdealer-services-composite-service-PROD-E2E.NA-Prod: +- name: CD_dealer-services-composite-service PROD +- mzName: CD_dealer-services-composite-service/management-zone/CDdealer-services-composite-service.name +- mzId: CD_dealer-services-composite-service/management-zone/CDdealer-services-composite-service.id +- tag: dealer-services-composite-service +- skipDeployment: "false" +CDdealer-services-composite-service-PROD-E2E.CN-Prod: +- name: CD_dealer-services-composite-service PROD +- mzName: CD_dealer-services-composite-service/management-zone/CDdealer-services-composite-service.name +- mzId: CD_dealer-services-composite-service/management-zone/CDdealer-services-composite-service.id +- tag: dealer-services-composite-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDdealer-services-composite-service-INT-TEST: +- name: CD_dealer-services-composite-service INT-TEST +- mzName: CD_dealer-services-composite-service/management-zone/CDdealer-services-composite-service.name +- mzId: CD_dealer-services-composite-service/management-zone/CDdealer-services-composite-service.id +- tag: dealer-services-composite-service +- skipDeployment: "true" +#Configuration +CDdealer-services-composite-service-INT-TEST.EMEA-PreProd: +- name: CD_dealer-services-composite-service INT-TEST +- mzName: CD_dealer-services-composite-service/management-zone/CDdealer-services-composite-service.name +- mzId: CD_dealer-services-composite-service/management-zone/CDdealer-services-composite-service.id +- tag: dealer-services-composite-service +- skipDeployment: "false" +CDdealer-services-composite-service-INT-TEST.NA-PreProd: +- name: CD_dealer-services-composite-service INT-TEST +- mzName: CD_dealer-services-composite-service/management-zone/CDdealer-services-composite-service.name +- mzId: CD_dealer-services-composite-service/management-zone/CDdealer-services-composite-service.id +- env: INT +- skipDeployment: "false" +CDdealer-services-composite-service-INT-TEST.CN-PreProd: +- name: CD_dealer-services-composite-service INT-TEST +- mzName: CD_dealer-services-composite-service/management-zone/CDdealer-services-composite-service.name +- mzId: CD_dealer-services-composite-service/management-zone/CDdealer-services-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-services-composite-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_dealer-services-composite-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-services-composite-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-services-composite-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_dealer-services-composite-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-services-composite-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-services-composite-service/management-zone/README.md b/BMW-Dynatrace-config/CD_dealer-services-composite-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-services-composite-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_dealer-services-composite-service/management-zone/default.json b/BMW-Dynatrace-config/CD_dealer-services-composite-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-services-composite-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-services-composite-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_dealer-services-composite-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..bc851a04 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-services-composite-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDdealer-services-composite-service: default.json + +CDdealer-services-composite-service: +- name: CD_dealer-services-composite-service +- tag: dealer-services-composite-service diff --git a/BMW-Dynatrace-config/CD_dealer-services-composite-service/notification/README.md b/BMW-Dynatrace-config/CD_dealer-services-composite-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-services-composite-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-services-composite-service/notification/email.json b/BMW-Dynatrace-config/CD_dealer-services-composite-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-services-composite-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-services-composite-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_dealer-services-composite-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-services-composite-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-services-composite-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_dealer-services-composite-service/notification/notification.yaml new file mode 100644 index 00000000..c14775fd --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-services-composite-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDdealer-services-composite-service-PROD: msTeams.json +- CDdealer-services-composite-service-E2E: msTeams.json +- CDdealer-services-composite-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-services-composite-service-PROD: +- name: CD_dealer-services-composite-service PROD +- alertingProfile: CD_dealer-services-composite-service/alerting-profile/CDdealer-services-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdealer-services-composite-service-PROD.EMEA-Prod: +- name: CD_dealer-services-composite-service PROD +- alertingProfile: CD_dealer-services-composite-service/alerting-profile/CDdealer-services-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-services-composite-service-PROD.NA-Prod: +- name: CD_dealer-services-composite-service PROD +- alertingProfile: CD_dealer-services-composite-service/alerting-profile/CDdealer-services-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-services-composite-service-PROD.CN-Prod: +- name: CD_dealer-services-composite-service PROD +- alertingProfile: CD_dealer-services-composite-service/alerting-profile/CDdealer-services-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-services-composite-service-E2E: +- name: CD_dealer-services-composite-service E2E +- alertingProfile: CD_dealer-services-composite-service/alerting-profile/CDdealer-services-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdealer-services-composite-service-E2E.EMEA-Prod: +- name: CD_dealer-services-composite-service E2E +- alertingProfile: CD_dealer-services-composite-service/alerting-profile/CDdealer-services-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-services-composite-service-E2E.NA-Prod: +- name: CD_dealer-services-composite-service E2E +- alertingProfile: CD_dealer-services-composite-service/alerting-profile/CDdealer-services-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-services-composite-service-E2E.CN-Prod: +- name: CD_dealer-services-composite-service E2E +- alertingProfile: CD_dealer-services-composite-service/alerting-profile/CDdealer-services-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealer-services-composite-service-INT: +- name: CD_dealer-services-composite-service INT +- alertingProfile: CD_dealer-services-composite-service/alerting-profile/CDdealer-services-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdealer-services-composite-service-INT.EMEA-PreProd: +- name: CD_dealer-services-composite-service INT +- alertingProfile: CD_dealer-services-composite-service/alerting-profile/CDdealer-services-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-services-composite-service-INT.NA-PreProd: +- name: CD_dealer-services-composite-service INT +- alertingProfile: CD_dealer-services-composite-service/alerting-profile/CDdealer-services-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDdealer-services-composite-service-INT.CN-PreProd: +- name: CD_dealer-services-composite-service INT +- alertingProfile: CD_dealer-services-composite-service/alerting-profile/CDdealer-services-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-services-composite-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_dealer-services-composite-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-services-composite-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-services-composite-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_dealer-services-composite-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-services-composite-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-services-composite-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_dealer-services-composite-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..5f26ad79 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-services-composite-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- dealer-services-composite-service: default.json + +dealer-services-composite-service: +- name: CD_dealer-services-composite-service - +- mzName: CD_dealer-services-composite-service/management-zone/CDdealer-services-composite-service.name +- mzId: CD_dealer-services-composite-service/management-zone/CDdealer-services-composite-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealercockpit/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_dealercockpit/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..7a8de900 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealercockpit/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDdealercockpit-PROD: default.json +- CDdealercockpit-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealercockpit-PROD: +- name: CD_dealercockpit PROD +- tag: dealercockpit +- mzId: CD_dealercockpit/management-zone/CDdealercockpit.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDdealercockpit-PROD.EMEA-Prod: +- name: CD_dealercockpit PROD +- tag: dealercockpit +- mzId: CD_dealercockpit/management-zone/CDdealercockpit.id +- env: PROD +- skipDeployment: "false" +CDdealercockpit-PROD.NA-Prod: +- name: CD_dealercockpit PROD +- tag: dealercockpit +- mzId: CD_dealercockpit/management-zone/CDdealercockpit.id +- env: PROD +- skipDeployment: "false" +CDdealercockpit-PROD.CN-Prod: +- name: CD_dealercockpit PROD +- tag: dealercockpit +- mzId: CD_dealercockpit/management-zone/CDdealercockpit.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealercockpit-INT: +- name: CD_dealercockpit INT +- tag: dealercockpit +- mzId: CD_dealercockpit/management-zone/CDdealercockpit.id +- env: INT +- skipDeployment: "true" +#Configuration +CDdealercockpit-INT.EMEA-PreProd: +- name: CD_dealercockpit INT +- tag: dealercockpit +- mzId: CD_dealercockpit/management-zone/CDdealercockpit.id +- env: INT +- skipDeployment: "false" +CDdealercockpit-INT.NA-PreProd: +- name: CD_dealercockpit INT +- tag: dealercockpit +- mzId: CD_dealercockpit/management-zone/CDdealercockpit.id +- env: INT +- skipDeployment: "false" +CDdealercockpit-INT.CN-PreProd: +- name: CD_dealercockpit INT +- tag: dealercockpit +- mzId: CD_dealercockpit/management-zone/CDdealercockpit.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealercockpit/alerting-profile/default.json b/BMW-Dynatrace-config/CD_dealercockpit/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealercockpit/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealercockpit/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_dealercockpit/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealercockpit/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealercockpit/custom-service-java/README.md b/BMW-Dynatrace-config/CD_dealercockpit/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealercockpit/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealercockpit/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_dealercockpit/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealercockpit/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealercockpit/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_dealercockpit/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealercockpit/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealercockpit/dashboard/README.md b/BMW-Dynatrace-config/CD_dealercockpit/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealercockpit/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealercockpit/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_dealercockpit/dashboard/dashboard.yaml new file mode 100644 index 00000000..19aee4f8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealercockpit/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDdealercockpit-PROD-E2E: defaultPRODE2E.json +- CDdealercockpit-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDdealercockpit-PROD-E2E: +- name: CD_dealercockpit PROD-E2E +- mzName: CD_dealercockpit/management-zone/CDdealercockpit.name +- mzId: CD_dealercockpit/management-zone/CDdealercockpit.id +- skipDeployment: "true" +#Configuration +CDdealercockpit-PROD-E2E.EMEA-Prod: +- name: CD_dealercockpit PROD-E2E +- mzName: CD_dealercockpit/management-zone/CDdealercockpit.name +- mzId: CD_dealercockpit/management-zone/CDdealercockpit.id +- tag: dealercockpit +- skipDeployment: "false" +CDdealercockpit-PROD-E2E.NA-Prod: +- name: CD_dealercockpit PROD-E2E +- mzName: CD_dealercockpit/management-zone/CDdealercockpit.name +- mzId: CD_dealercockpit/management-zone/CDdealercockpit.id +- tag: dealercockpit +- skipDeployment: "false" +CDdealercockpit-PROD-E2E.CN-Prod: +- name: CD_dealercockpit PROD-E2E +- mzName: CD_dealercockpit/management-zone/CDdealercockpit.name +- mzId: CD_dealercockpit/management-zone/CDdealercockpit.id +- tag: dealercockpit +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDdealercockpit-INT-TEST: +- name: CD_dealercockpit INT-TEST +- mzName: CD_dealercockpit/management-zone/CDdealercockpit.name +- mzId: CD_dealercockpit/management-zone/CDdealercockpit.id +- tag: dealercockpit +- skipDeployment: "true" +#Configuration +CDdealercockpit-INT-TEST.EMEA-PreProd: +- name: CD_dealercockpit INT-TEST +- mzName: CD_dealercockpit/management-zone/CDdealercockpit.name +- mzId: CD_dealercockpit/management-zone/CDdealercockpit.id +- tag: dealercockpit +- skipDeployment: "false" +CDdealercockpit-INT-TEST.NA-PreProd: +- name: CD_dealercockpit INT-TEST +- mzName: CD_dealercockpit/management-zone/CDdealercockpit.name +- mzId: CD_dealercockpit/management-zone/CDdealercockpit.id +- env: INT +- skipDeployment: "false" +CDdealercockpit-INT-TEST.CN-PreProd: +- name: CD_dealercockpit INT-TEST +- mzName: CD_dealercockpit/management-zone/CDdealercockpit.name +- mzId: CD_dealercockpit/management-zone/CDdealercockpit.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealercockpit/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_dealercockpit/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealercockpit/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealercockpit/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_dealercockpit/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealercockpit/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealercockpit/management-zone/README.md b/BMW-Dynatrace-config/CD_dealercockpit/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealercockpit/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_dealercockpit/management-zone/default.json b/BMW-Dynatrace-config/CD_dealercockpit/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealercockpit/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealercockpit/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_dealercockpit/management-zone/management-zone.yaml new file mode 100644 index 00000000..2f477e3c --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealercockpit/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDdealercockpit: default.json + +CDdealercockpit: +- name: CD_dealercockpit +- tag: dealercockpit diff --git a/BMW-Dynatrace-config/CD_dealercockpit/notification/README.md b/BMW-Dynatrace-config/CD_dealercockpit/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealercockpit/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealercockpit/notification/email.json b/BMW-Dynatrace-config/CD_dealercockpit/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealercockpit/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealercockpit/notification/msTeams.json b/BMW-Dynatrace-config/CD_dealercockpit/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealercockpit/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealercockpit/notification/notification.yaml b/BMW-Dynatrace-config/CD_dealercockpit/notification/notification.yaml new file mode 100644 index 00000000..06f65261 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealercockpit/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDdealercockpit-PROD: msTeams.json +- CDdealercockpit-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealercockpit-PROD: +- name: CD_dealercockpit PROD +- alertingProfile: CD_dealercockpit/alerting-profile/CDdealercockpit-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdealercockpit-PROD.EMEA-Prod: +- name: CD_dealercockpit PROD +- alertingProfile: CD_dealercockpit/alerting-profile/CDdealercockpit-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDdealercockpit-PROD.NA-Prod: +- name: CD_dealercockpit PROD +- alertingProfile: CD_dealercockpit/alerting-profile/CDdealercockpit-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDdealercockpit-PROD.CN-Prod: +- name: CD_dealercockpit PROD +- alertingProfile: CD_dealercockpit/alerting-profile/CDdealercockpit-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdealercockpit-INT: +- name: CD_dealercockpit INT +- alertingProfile: CD_dealercockpit/alerting-profile/CDdealercockpit-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdealercockpit-INT.EMEA-PreProd: +- name: CD_dealercockpit INT +- alertingProfile: CD_dealercockpit/alerting-profile/CDdealercockpit-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDdealercockpit-INT.NA-PreProd: +- name: CD_dealercockpit INT +- alertingProfile: CD_dealercockpit/alerting-profile/CDdealercockpit-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDdealercockpit-INT.CN-PreProd: +- name: CD_dealercockpit INT +- alertingProfile: CD_dealercockpit/alerting-profile/CDdealercockpit-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealercockpit/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_dealercockpit/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealercockpit/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealercockpit/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_dealercockpit/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealercockpit/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealercockpit/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_dealercockpit/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..dc2ed9a3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealercockpit/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- dealercockpit: default.json + +dealercockpit: +- name: CD_dealercockpit - +- mzName: CD_dealercockpit/management-zone/CDdealercockpit.name +- mzId: CD_dealercockpit/management-zone/CDdealercockpit.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_delivery/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_delivery/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..d97bb9a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_delivery/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDdelivery-PROD: default.json +- CDdelivery-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDdelivery-PROD: +- name: CD_delivery PROD +- tag: delivery +- mzId: CD_delivery/management-zone/CDdelivery.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDdelivery-PROD.EMEA-Prod: +- name: CD_delivery PROD +- tag: delivery +- mzId: CD_delivery/management-zone/CDdelivery.id +- env: PROD +- skipDeployment: "false" +CDdelivery-PROD.NA-Prod: +- name: CD_delivery PROD +- tag: delivery +- mzId: CD_delivery/management-zone/CDdelivery.id +- env: PROD +- skipDeployment: "false" +CDdelivery-PROD.CN-Prod: +- name: CD_delivery PROD +- tag: delivery +- mzId: CD_delivery/management-zone/CDdelivery.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDdelivery-INT: +- name: CD_delivery INT +- tag: delivery +- mzId: CD_delivery/management-zone/CDdelivery.id +- env: INT +- skipDeployment: "true" +#Configuration +CDdelivery-INT.EMEA-PreProd: +- name: CD_delivery INT +- tag: delivery +- mzId: CD_delivery/management-zone/CDdelivery.id +- env: INT +- skipDeployment: "false" +CDdelivery-INT.NA-PreProd: +- name: CD_delivery INT +- tag: delivery +- mzId: CD_delivery/management-zone/CDdelivery.id +- env: INT +- skipDeployment: "false" +CDdelivery-INT.CN-PreProd: +- name: CD_delivery INT +- tag: delivery +- mzId: CD_delivery/management-zone/CDdelivery.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_delivery/alerting-profile/default.json b/BMW-Dynatrace-config/CD_delivery/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_delivery/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_delivery/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_delivery/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_delivery/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_delivery/custom-service-java/README.md b/BMW-Dynatrace-config/CD_delivery/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_delivery/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_delivery/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_delivery/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_delivery/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_delivery/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_delivery/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_delivery/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_delivery/dashboard/README.md b/BMW-Dynatrace-config/CD_delivery/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_delivery/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_delivery/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_delivery/dashboard/dashboard.yaml new file mode 100644 index 00000000..02126d63 --- /dev/null +++ b/BMW-Dynatrace-config/CD_delivery/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDdelivery-PROD-E2E: defaultPRODE2E.json +- CDdelivery-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDdelivery-PROD-E2E: +- name: CD_delivery PROD-E2E +- mzName: CD_delivery/management-zone/CDdelivery.name +- mzId: CD_delivery/management-zone/CDdelivery.id +- skipDeployment: "true" +#Configuration +CDdelivery-PROD-E2E.EMEA-Prod: +- name: CD_delivery PROD-E2E +- mzName: CD_delivery/management-zone/CDdelivery.name +- mzId: CD_delivery/management-zone/CDdelivery.id +- tag: delivery +- skipDeployment: "false" +CDdelivery-PROD-E2E.NA-Prod: +- name: CD_delivery PROD-E2E +- mzName: CD_delivery/management-zone/CDdelivery.name +- mzId: CD_delivery/management-zone/CDdelivery.id +- tag: delivery +- skipDeployment: "false" +CDdelivery-PROD-E2E.CN-Prod: +- name: CD_delivery PROD-E2E +- mzName: CD_delivery/management-zone/CDdelivery.name +- mzId: CD_delivery/management-zone/CDdelivery.id +- tag: delivery +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDdelivery-INT-TEST: +- name: CD_delivery INT-TEST +- mzName: CD_delivery/management-zone/CDdelivery.name +- mzId: CD_delivery/management-zone/CDdelivery.id +- tag: delivery +- skipDeployment: "true" +#Configuration +CDdelivery-INT-TEST.EMEA-PreProd: +- name: CD_delivery INT-TEST +- mzName: CD_delivery/management-zone/CDdelivery.name +- mzId: CD_delivery/management-zone/CDdelivery.id +- tag: delivery +- skipDeployment: "false" +CDdelivery-INT-TEST.NA-PreProd: +- name: CD_delivery INT-TEST +- mzName: CD_delivery/management-zone/CDdelivery.name +- mzId: CD_delivery/management-zone/CDdelivery.id +- env: INT +- skipDeployment: "false" +CDdelivery-INT-TEST.CN-PreProd: +- name: CD_delivery INT-TEST +- mzName: CD_delivery/management-zone/CDdelivery.name +- mzId: CD_delivery/management-zone/CDdelivery.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_delivery/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_delivery/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_delivery/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_delivery/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_delivery/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_delivery/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_delivery/management-zone/README.md b/BMW-Dynatrace-config/CD_delivery/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_delivery/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_delivery/management-zone/default.json b/BMW-Dynatrace-config/CD_delivery/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_delivery/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_delivery/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_delivery/management-zone/management-zone.yaml new file mode 100644 index 00000000..a14df4f0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_delivery/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDdelivery: default.json + +CDdelivery: +- name: CD_delivery +- tag: delivery diff --git a/BMW-Dynatrace-config/CD_delivery/notification/README.md b/BMW-Dynatrace-config/CD_delivery/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_delivery/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_delivery/notification/email.json b/BMW-Dynatrace-config/CD_delivery/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_delivery/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_delivery/notification/msTeams.json b/BMW-Dynatrace-config/CD_delivery/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_delivery/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_delivery/notification/notification.yaml b/BMW-Dynatrace-config/CD_delivery/notification/notification.yaml new file mode 100644 index 00000000..7bb24112 --- /dev/null +++ b/BMW-Dynatrace-config/CD_delivery/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDdelivery-PROD: msTeams.json +- CDdelivery-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdelivery-PROD: +- name: CD_delivery PROD +- alertingProfile: CD_delivery/alerting-profile/CDdelivery-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdelivery-PROD.EMEA-Prod: +- name: CD_delivery PROD +- alertingProfile: CD_delivery/alerting-profile/CDdelivery-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDdelivery-PROD.NA-Prod: +- name: CD_delivery PROD +- alertingProfile: CD_delivery/alerting-profile/CDdelivery-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDdelivery-PROD.CN-Prod: +- name: CD_delivery PROD +- alertingProfile: CD_delivery/alerting-profile/CDdelivery-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdelivery-INT: +- name: CD_delivery INT +- alertingProfile: CD_delivery/alerting-profile/CDdelivery-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdelivery-INT.EMEA-PreProd: +- name: CD_delivery INT +- alertingProfile: CD_delivery/alerting-profile/CDdelivery-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDdelivery-INT.NA-PreProd: +- name: CD_delivery INT +- alertingProfile: CD_delivery/alerting-profile/CDdelivery-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDdelivery-INT.CN-PreProd: +- name: CD_delivery INT +- alertingProfile: CD_delivery/alerting-profile/CDdelivery-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_delivery/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_delivery/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_delivery/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_delivery/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_delivery/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_delivery/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_delivery/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_delivery/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..db3aaf64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_delivery/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- delivery: default.json + +delivery: +- name: CD_delivery - +- mzName: CD_delivery/management-zone/CDdelivery.name +- mzId: CD_delivery/management-zone/CDdelivery.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_destination-composite-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_destination-composite-service/alerting-profile/alerting-profile.yaml index 5125c32e..0a0237b4 100644 --- a/BMW-Dynatrace-config/CD_destination-composite-service/alerting-profile/alerting-profile.yaml +++ b/BMW-Dynatrace-config/CD_destination-composite-service/alerting-profile/alerting-profile.yaml @@ -1,6 +1,88 @@ -CDdestination-composite-service: -- name: CD_destination-composite-service/management-zone/CDdestination-composite-service.name +config: +- CDdestination-composite-service-PROD: default.json +- CDdestination-composite-service-E2E: default.json +- CDdestination-composite-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDdestination-composite-service-PROD: +- name: CD_destination-composite-service PROD - tag: destination-composite-service - mzId: CD_destination-composite-service/management-zone/CDdestination-composite-service.id -config: -- CDdestination-composite-service: destination-composite-service.json +- env: PROD +- skipDeployment: "true" +#Configuration +CDdestination-composite-service-PROD.EMEA-Prod: +- name: CD_destination-composite-service PROD +- tag: destination-composite-service +- mzId: CD_destination-composite-service/management-zone/CDdestination-composite-service.id +- env: PROD +- skipDeployment: "false" +CDdestination-composite-service-PROD.NA-Prod: +- name: CD_destination-composite-service PROD +- tag: destination-composite-service +- mzId: CD_destination-composite-service/management-zone/CDdestination-composite-service.id +- env: PROD +- skipDeployment: "false" +CDdestination-composite-service-PROD.CN-Prod: +- name: CD_destination-composite-service PROD +- tag: destination-composite-service +- mzId: CD_destination-composite-service/management-zone/CDdestination-composite-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDdestination-composite-service-E2E: +- name: CD_destination-composite-service E2E +- tag: destination-composite-service +- mzId: CD_destination-composite-service/management-zone/CDdestination-composite-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDdestination-composite-service-E2E.EMEA-Prod: +- name: CD_destination-composite-service E2E +- tag: destination-composite-service +- mzId: CD_destination-composite-service/management-zone/CDdestination-composite-service.id +- env: E2E +- skipDeployment: "false" +CDdestination-composite-service-E2E.NA-Prod: +- name: CD_destination-composite-service E2E +- tag: destination-composite-service +- mzId: CD_destination-composite-service/management-zone/CDdestination-composite-service.id +- env: E2E +- skipDeployment: "false" +CDdestination-composite-service-E2E.CN-Prod: +- name: CD_destination-composite-service E2E +- tag: destination-composite-service +- mzId: CD_destination-composite-service/management-zone/CDdestination-composite-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDdestination-composite-service-INT: +- name: CD_destination-composite-service INT +- tag: destination-composite-service +- mzId: CD_destination-composite-service/management-zone/CDdestination-composite-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDdestination-composite-service-INT.EMEA-PreProd: +- name: CD_destination-composite-service INT +- tag: destination-composite-service +- mzId: CD_destination-composite-service/management-zone/CDdestination-composite-service.id +- env: INT +- skipDeployment: "false" +CDdestination-composite-service-INT.NA-PreProd: +- name: CD_destination-composite-service INT +- tag: destination-composite-service +- mzId: CD_destination-composite-service/management-zone/CDdestination-composite-service.id +- env: INT +- skipDeployment: "false" +CDdestination-composite-service-INT.CN-PreProd: +- name: CD_destination-composite-service INT +- tag: destination-composite-service +- mzId: CD_destination-composite-service/management-zone/CDdestination-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_destination-composite-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_destination-composite-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_destination-composite-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_destination-composite-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_destination-composite-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_destination-composite-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_destination-composite-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_destination-composite-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_destination-composite-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_destination-composite-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_destination-composite-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_destination-composite-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_destination-composite-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_destination-composite-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_destination-composite-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_destination-composite-service/dashboard/README.md b/BMW-Dynatrace-config/CD_destination-composite-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_destination-composite-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_destination-composite-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_destination-composite-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..ac80452a --- /dev/null +++ b/BMW-Dynatrace-config/CD_destination-composite-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDdestination-composite-service-PROD-E2E: defaultPRODE2E.json +- CDdestination-composite-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDdestination-composite-service-PROD-E2E: +- name: CD_destination-composite-service PROD +- mzName: CD_destination-composite-service/management-zone/CDdestination-composite-service.name +- mzId: CD_destination-composite-service/management-zone/CDdestination-composite-service.id +- skipDeployment: "true" +#Configuration +CDdestination-composite-service-PROD-E2E.EMEA-Prod: +- name: CD_destination-composite-service PROD +- mzName: CD_destination-composite-service/management-zone/CDdestination-composite-service.name +- mzId: CD_destination-composite-service/management-zone/CDdestination-composite-service.id +- tag: destination-composite-service +- skipDeployment: "false" +CDdestination-composite-service-PROD-E2E.NA-Prod: +- name: CD_destination-composite-service PROD +- mzName: CD_destination-composite-service/management-zone/CDdestination-composite-service.name +- mzId: CD_destination-composite-service/management-zone/CDdestination-composite-service.id +- tag: destination-composite-service +- skipDeployment: "false" +CDdestination-composite-service-PROD-E2E.CN-Prod: +- name: CD_destination-composite-service PROD +- mzName: CD_destination-composite-service/management-zone/CDdestination-composite-service.name +- mzId: CD_destination-composite-service/management-zone/CDdestination-composite-service.id +- tag: destination-composite-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDdestination-composite-service-INT-TEST: +- name: CD_destination-composite-service INT-TEST +- mzName: CD_destination-composite-service/management-zone/CDdestination-composite-service.name +- mzId: CD_destination-composite-service/management-zone/CDdestination-composite-service.id +- tag: destination-composite-service +- skipDeployment: "true" +#Configuration +CDdestination-composite-service-INT-TEST.EMEA-PreProd: +- name: CD_destination-composite-service INT-TEST +- mzName: CD_destination-composite-service/management-zone/CDdestination-composite-service.name +- mzId: CD_destination-composite-service/management-zone/CDdestination-composite-service.id +- tag: destination-composite-service +- skipDeployment: "false" +CDdestination-composite-service-INT-TEST.NA-PreProd: +- name: CD_destination-composite-service INT-TEST +- mzName: CD_destination-composite-service/management-zone/CDdestination-composite-service.name +- mzId: CD_destination-composite-service/management-zone/CDdestination-composite-service.id +- env: INT +- skipDeployment: "false" +CDdestination-composite-service-INT-TEST.CN-PreProd: +- name: CD_destination-composite-service INT-TEST +- mzName: CD_destination-composite-service/management-zone/CDdestination-composite-service.name +- mzId: CD_destination-composite-service/management-zone/CDdestination-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_destination-composite-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_destination-composite-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_destination-composite-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_destination-composite-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_destination-composite-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_destination-composite-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_destination-composite-service/management-zone/README.md b/BMW-Dynatrace-config/CD_destination-composite-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_destination-composite-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_destination-composite-service/management-zone/default.json b/BMW-Dynatrace-config/CD_destination-composite-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_destination-composite-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_destination-composite-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_destination-composite-service/management-zone/management-zone.yaml index e76c3a3e..19ec6bc7 100644 --- a/BMW-Dynatrace-config/CD_destination-composite-service/management-zone/management-zone.yaml +++ b/BMW-Dynatrace-config/CD_destination-composite-service/management-zone/management-zone.yaml @@ -1,20 +1,6 @@ -CDdestination-composite-service.CN-PreProd: -- name: CD_destination-composite-service -- tag: destination-composite-service -CDdestination-composite-service.CN-Prod: -- name: CD_destination-composite-service -- tag: destination-composite-service -CDdestination-composite-service.EMEA-PreProd: -- name: CD_destination-composite-service -- tag: destination-composite-service -CDdestination-composite-service.EMEA-Prod: -- name: CD_destination-composite-service -- tag: destination-composite-service -CDdestination-composite-service.NA-PreProd: -- name: CD_destination-composite-service -- tag: destination-composite-service -CDdestination-composite-service.NA-Prod: -- name: CD_destination-composite-service -- tag: destination-composite-service config: -- CDdestination-composite-service: CDdestination-composite-service.json +- CDdestination-composite-service: default.json + +CDdestination-composite-service: +- name: CD_destination-composite-service +- tag: destination-composite-service diff --git a/BMW-Dynatrace-config/CD_destination-composite-service/notification/README.md b/BMW-Dynatrace-config/CD_destination-composite-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_destination-composite-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_destination-composite-service/notification/email.json b/BMW-Dynatrace-config/CD_destination-composite-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_destination-composite-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_destination-composite-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_destination-composite-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_destination-composite-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_destination-composite-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_destination-composite-service/notification/notification.yaml new file mode 100644 index 00000000..7226bb81 --- /dev/null +++ b/BMW-Dynatrace-config/CD_destination-composite-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDdestination-composite-service-PROD: msTeams.json +- CDdestination-composite-service-E2E: msTeams.json +- CDdestination-composite-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdestination-composite-service-PROD: +- name: CD_destination-composite-service PROD +- alertingProfile: CD_destination-composite-service/alerting-profile/CDdestination-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdestination-composite-service-PROD.EMEA-Prod: +- name: CD_destination-composite-service PROD +- alertingProfile: CD_destination-composite-service/alerting-profile/CDdestination-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDdestination-composite-service-PROD.NA-Prod: +- name: CD_destination-composite-service PROD +- alertingProfile: CD_destination-composite-service/alerting-profile/CDdestination-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDdestination-composite-service-PROD.CN-Prod: +- name: CD_destination-composite-service PROD +- alertingProfile: CD_destination-composite-service/alerting-profile/CDdestination-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdestination-composite-service-E2E: +- name: CD_destination-composite-service E2E +- alertingProfile: CD_destination-composite-service/alerting-profile/CDdestination-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdestination-composite-service-E2E.EMEA-Prod: +- name: CD_destination-composite-service E2E +- alertingProfile: CD_destination-composite-service/alerting-profile/CDdestination-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDdestination-composite-service-E2E.NA-Prod: +- name: CD_destination-composite-service E2E +- alertingProfile: CD_destination-composite-service/alerting-profile/CDdestination-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDdestination-composite-service-E2E.CN-Prod: +- name: CD_destination-composite-service E2E +- alertingProfile: CD_destination-composite-service/alerting-profile/CDdestination-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdestination-composite-service-INT: +- name: CD_destination-composite-service INT +- alertingProfile: CD_destination-composite-service/alerting-profile/CDdestination-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdestination-composite-service-INT.EMEA-PreProd: +- name: CD_destination-composite-service INT +- alertingProfile: CD_destination-composite-service/alerting-profile/CDdestination-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDdestination-composite-service-INT.NA-PreProd: +- name: CD_destination-composite-service INT +- alertingProfile: CD_destination-composite-service/alerting-profile/CDdestination-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDdestination-composite-service-INT.CN-PreProd: +- name: CD_destination-composite-service INT +- alertingProfile: CD_destination-composite-service/alerting-profile/CDdestination-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_destination-composite-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_destination-composite-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_destination-composite-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_destination-composite-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_destination-composite-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_destination-composite-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_destination-composite-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_destination-composite-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..5952654a --- /dev/null +++ b/BMW-Dynatrace-config/CD_destination-composite-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- destination-composite-service: default.json + +destination-composite-service: +- name: CD_destination-composite-service - +- mzName: CD_destination-composite-service/management-zone/CDdestination-composite-service.name +- mzId: CD_destination-composite-service/management-zone/CDdestination-composite-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_digital-key-composite-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_digital-key-composite-service/alerting-profile/alerting-profile.yaml index d400ed19..13ec309e 100644 --- a/BMW-Dynatrace-config/CD_digital-key-composite-service/alerting-profile/alerting-profile.yaml +++ b/BMW-Dynatrace-config/CD_digital-key-composite-service/alerting-profile/alerting-profile.yaml @@ -1,6 +1,88 @@ -CDdigital-key-composite-service: -- name: CD_digital-key-composite-service/management-zone/CDdigital-key-composite-service.name +config: +- CDdigital-key-composite-service-PROD: default.json +- CDdigital-key-composite-service-E2E: default.json +- CDdigital-key-composite-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDdigital-key-composite-service-PROD: +- name: CD_digital-key-composite-service PROD - tag: digital-key-composite-service - mzId: CD_digital-key-composite-service/management-zone/CDdigital-key-composite-service.id -config: -- CDdigital-key-composite-service: digital-key-composite-service.json +- env: PROD +- skipDeployment: "true" +#Configuration +CDdigital-key-composite-service-PROD.EMEA-Prod: +- name: CD_digital-key-composite-service PROD +- tag: digital-key-composite-service +- mzId: CD_digital-key-composite-service/management-zone/CDdigital-key-composite-service.id +- env: PROD +- skipDeployment: "false" +CDdigital-key-composite-service-PROD.NA-Prod: +- name: CD_digital-key-composite-service PROD +- tag: digital-key-composite-service +- mzId: CD_digital-key-composite-service/management-zone/CDdigital-key-composite-service.id +- env: PROD +- skipDeployment: "false" +CDdigital-key-composite-service-PROD.CN-Prod: +- name: CD_digital-key-composite-service PROD +- tag: digital-key-composite-service +- mzId: CD_digital-key-composite-service/management-zone/CDdigital-key-composite-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDdigital-key-composite-service-E2E: +- name: CD_digital-key-composite-service E2E +- tag: digital-key-composite-service +- mzId: CD_digital-key-composite-service/management-zone/CDdigital-key-composite-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDdigital-key-composite-service-E2E.EMEA-Prod: +- name: CD_digital-key-composite-service E2E +- tag: digital-key-composite-service +- mzId: CD_digital-key-composite-service/management-zone/CDdigital-key-composite-service.id +- env: E2E +- skipDeployment: "false" +CDdigital-key-composite-service-E2E.NA-Prod: +- name: CD_digital-key-composite-service E2E +- tag: digital-key-composite-service +- mzId: CD_digital-key-composite-service/management-zone/CDdigital-key-composite-service.id +- env: E2E +- skipDeployment: "false" +CDdigital-key-composite-service-E2E.CN-Prod: +- name: CD_digital-key-composite-service E2E +- tag: digital-key-composite-service +- mzId: CD_digital-key-composite-service/management-zone/CDdigital-key-composite-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDdigital-key-composite-service-INT: +- name: CD_digital-key-composite-service INT +- tag: digital-key-composite-service +- mzId: CD_digital-key-composite-service/management-zone/CDdigital-key-composite-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDdigital-key-composite-service-INT.EMEA-PreProd: +- name: CD_digital-key-composite-service INT +- tag: digital-key-composite-service +- mzId: CD_digital-key-composite-service/management-zone/CDdigital-key-composite-service.id +- env: INT +- skipDeployment: "false" +CDdigital-key-composite-service-INT.NA-PreProd: +- name: CD_digital-key-composite-service INT +- tag: digital-key-composite-service +- mzId: CD_digital-key-composite-service/management-zone/CDdigital-key-composite-service.id +- env: INT +- skipDeployment: "false" +CDdigital-key-composite-service-INT.CN-PreProd: +- name: CD_digital-key-composite-service INT +- tag: digital-key-composite-service +- mzId: CD_digital-key-composite-service/management-zone/CDdigital-key-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_digital-key-composite-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_digital-key-composite-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_digital-key-composite-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_digital-key-composite-service/alerting-profile/digital-key-composite-service.json b/BMW-Dynatrace-config/CD_digital-key-composite-service/alerting-profile/digital-key-composite-service.json deleted file mode 100644 index d10ad44a..00000000 --- a/BMW-Dynatrace-config/CD_digital-key-composite-service/alerting-profile/digital-key-composite-service.json +++ /dev/null @@ -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}}" - } - ] - } - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_digital-key-composite-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_digital-key-composite-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_digital-key-composite-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_digital-key-composite-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_digital-key-composite-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_digital-key-composite-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_digital-key-composite-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_digital-key-composite-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_digital-key-composite-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_digital-key-composite-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_digital-key-composite-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_digital-key-composite-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_digital-key-composite-service/dashboard/README.md b/BMW-Dynatrace-config/CD_digital-key-composite-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_digital-key-composite-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_digital-key-composite-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_digital-key-composite-service/dashboard/dashboard.yaml index ec1584ee..1d575b93 100644 --- a/BMW-Dynatrace-config/CD_digital-key-composite-service/dashboard/dashboard.yaml +++ b/BMW-Dynatrace-config/CD_digital-key-composite-service/dashboard/dashboard.yaml @@ -1,6 +1,59 @@ -CDdigital-key-composite-service: -- name: CD_digital-key-composite-service/management-zone/CDdigital-key-composite-service.name +config: +- CDdigital-key-composite-service-PROD-E2E: defaultPRODE2E.json +- CDdigital-key-composite-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDdigital-key-composite-service-PROD-E2E: +- name: CD_digital-key-composite-service PROD - mzName: CD_digital-key-composite-service/management-zone/CDdigital-key-composite-service.name - mzId: CD_digital-key-composite-service/management-zone/CDdigital-key-composite-service.id -config: -- CDdigital-key-composite-service: digital-key-composite-service.json +- skipDeployment: "true" +#Configuration +CDdigital-key-composite-service-PROD-E2E.EMEA-Prod: +- name: CD_digital-key-composite-service PROD +- mzName: CD_digital-key-composite-service/management-zone/CDdigital-key-composite-service.name +- mzId: CD_digital-key-composite-service/management-zone/CDdigital-key-composite-service.id +- tag: digital-key-composite-service +- skipDeployment: "false" +CDdigital-key-composite-service-PROD-E2E.NA-Prod: +- name: CD_digital-key-composite-service PROD +- mzName: CD_digital-key-composite-service/management-zone/CDdigital-key-composite-service.name +- mzId: CD_digital-key-composite-service/management-zone/CDdigital-key-composite-service.id +- tag: digital-key-composite-service +- skipDeployment: "false" +CDdigital-key-composite-service-PROD-E2E.CN-Prod: +- name: CD_digital-key-composite-service PROD +- mzName: CD_digital-key-composite-service/management-zone/CDdigital-key-composite-service.name +- mzId: CD_digital-key-composite-service/management-zone/CDdigital-key-composite-service.id +- tag: digital-key-composite-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDdigital-key-composite-service-INT-TEST: +- name: CD_digital-key-composite-service INT-TEST +- mzName: CD_digital-key-composite-service/management-zone/CDdigital-key-composite-service.name +- mzId: CD_digital-key-composite-service/management-zone/CDdigital-key-composite-service.id +- tag: digital-key-composite-service +- skipDeployment: "true" +#Configuration +CDdigital-key-composite-service-INT-TEST.EMEA-PreProd: +- name: CD_digital-key-composite-service INT-TEST +- mzName: CD_digital-key-composite-service/management-zone/CDdigital-key-composite-service.name +- mzId: CD_digital-key-composite-service/management-zone/CDdigital-key-composite-service.id +- tag: digital-key-composite-service +- skipDeployment: "false" +CDdigital-key-composite-service-INT-TEST.NA-PreProd: +- name: CD_digital-key-composite-service INT-TEST +- mzName: CD_digital-key-composite-service/management-zone/CDdigital-key-composite-service.name +- mzId: CD_digital-key-composite-service/management-zone/CDdigital-key-composite-service.id +- env: INT +- skipDeployment: "false" +CDdigital-key-composite-service-INT-TEST.CN-PreProd: +- name: CD_digital-key-composite-service INT-TEST +- mzName: CD_digital-key-composite-service/management-zone/CDdigital-key-composite-service.name +- mzId: CD_digital-key-composite-service/management-zone/CDdigital-key-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_digital-key-composite-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_digital-key-composite-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_digital-key-composite-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_digital-key-composite-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_digital-key-composite-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_digital-key-composite-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_digital-key-composite-service/dashboard/digital-key-composite-service.json b/BMW-Dynatrace-config/CD_digital-key-composite-service/dashboard/digital-key-composite-service.json deleted file mode 100644 index 456b9293..00000000 --- a/BMW-Dynatrace-config/CD_digital-key-composite-service/dashboard/digital-key-composite-service.json +++ /dev/null @@ -1,233 +0,0 @@ -{ - "dashboardMetadata": { - "name": "{{.name}}", - "owner": "Ignacio.Goldman@partner.bmwgroup.com", - "shared": true, - "sharingDetails": { - "linkShared": true, - "published": true - }, - "dashboardFilter": { - "managementZone": { - "id": "{{.mzId}}", - "name": "{{.mzName}}" - } - }, - "tags": [ - "{{.name}}" - ] - }, - "tiles": [ - { - "bounds": { - "height": 304, - "left": 38, - "top": 38, - "width": 1216 - }, - "configured": true, - "filterConfig": { - "chartConfig": { - "legendShown": true, - "resultMetadata": { - "nullbuiltin:service.errors.total.count|NONE|TOTAL|BAR|SERVICE": { - "customColor": "#ef651f", - "lastModified": 1595275955999 - }, - "nullbuiltin:service.requestCount.total|NONE|TOTAL|BAR|SERVICE": { - "customColor": "#008cdb", - "lastModified": 1595275720776 - }, - "nullbuiltin:service.response.time|AVG|TOTAL|LINE|SERVICE": { - "customColor": "#b4e5f9", - "lastModified": 1595275686773 - } - }, - "series": [ - { - "aggregation": "AVG", - "aggregationRate": "TOTAL", - "dimensions": [], - "entityType": "SERVICE", - "metric": "builtin:service.response.time", - "percentile": null, - "sortAscending": false, - "sortColumn": false, - "type": "LINE" - }, - { - "aggregation": "NONE", - "aggregationRate": "TOTAL", - "dimensions": [], - "entityType": "SERVICE", - "metric": "builtin:service.requestCount.total", - "percentile": null, - "sortAscending": false, - "sortColumn": false, - "type": "BAR" - }, - { - "aggregation": "NONE", - "aggregationRate": "TOTAL", - "dimensions": [], - "entityType": "SERVICE", - "metric": "builtin:service.errors.total.count", - "percentile": null, - "sortAscending": false, - "sortColumn": true, - "type": "BAR" - } - ], - "type": "TIMESERIES" - }, - "customName": "Response time, Throughput and Number of Errors", - "defaultName": "Custom chart", - "filtersPerEntityType": {}, - "type": "MIXED" - }, - "name": "Custom chart", - "tileFilter": { - "managementZone": null, - "timeframe": null - }, - "tileType": "CUSTOM_CHARTING" - }, - { - "bounds": { - "height": 304, - "left": 38, - "top": 342, - "width": 304 - }, - "configured": true, - "filterConfig": { - "chartConfig": { - "legendShown": true, - "resultMetadata": { - "nullbuiltin:service.errors.fivexx.rate|AVG|TOTAL|BAR|SERVICE": { - "customColor": "#ef651f", - "lastModified": 1595276148986 - } - }, - "series": [ - { - "aggregation": "AVG", - "aggregationRate": "TOTAL", - "dimensions": [], - "entityType": "SERVICE", - "metric": "builtin:service.errors.fourxx.rate", - "percentile": null, - "sortAscending": false, - "sortColumn": false, - "type": "BAR" - }, - { - "aggregation": "AVG", - "aggregationRate": "TOTAL", - "dimensions": [], - "entityType": "SERVICE", - "metric": "builtin:service.errors.fivexx.rate", - "percentile": null, - "sortAscending": false, - "sortColumn": true, - "type": "BAR" - } - ], - "type": "TIMESERIES" - }, - "customName": "Failure rate (HTTP 4xx/5xx errors)", - "defaultName": "Custom chart", - "filtersPerEntityType": {}, - "type": "MIXED" - }, - "name": "Custom chart", - "tileFilter": { - "managementZone": null, - "timeframe": null - }, - "tileType": "CUSTOM_CHARTING" - }, - { - "bounds": { - "height": 304, - "left": 646, - "top": 342, - "width": 304 - }, - "chartVisible": true, - "configured": true, - "filterConfig": null, - "name": "Host health", - "tileFilter": { - "managementZone": null, - "timeframe": null - }, - "tileType": "HOSTS" - }, - { - "bounds": { - "height": 304, - "left": 342, - "top": 342, - "width": 304 - }, - "chartVisible": true, - "configured": true, - "filterConfig": null, - "name": "Service health", - "tileFilter": { - "managementZone": null, - "timeframe": null - }, - "tileType": "SERVICES" - }, - { - "bounds": { - "height": 304, - "left": 950, - "top": 342, - "width": 304 - }, - "chartVisible": true, - "configured": true, - "filterConfig": null, - "name": "Database health", - "tileFilter": { - "managementZone": null, - "timeframe": null - }, - "tileType": "DATABASES_OVERVIEW" - }, - { - "bounds": { - "height": 152, - "left": 1102, - "top": 646, - "width": 152 - }, - "configured": true, - "name": "Problems", - "tileFilter": { - "managementZone": null, - "timeframe": null - }, - "tileType": "OPEN_PROBLEMS" - }, - { - "bounds": { - "height": 304, - "left": 1254, - "top": 38, - "width": 152 - }, - "configured": true, - "markdown": "Response time (line, left axis), number of requests (blue bars, right axis) and number of errors (red bars, right axis).", - "name": "Markdown", - "tileFilter": { - "managementZone": null, - "timeframe": null - }, - "tileType": "MARKDOWN" - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_digital-key-composite-service/management-zone/CDdigital-key-composite-service.json b/BMW-Dynatrace-config/CD_digital-key-composite-service/management-zone/CDdigital-key-composite-service.json deleted file mode 100644 index b2a9367b..00000000 --- a/BMW-Dynatrace-config/CD_digital-key-composite-service/management-zone/CDdigital-key-composite-service.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "dimensionalRules": [], - "name": "{{.name}}", - "rules": [ - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "{{.tag}}" - } - }, - "key": { - "attribute": "SERVICE_TAGS" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "HealthResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PingResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PrometheusResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - } - ], - "enabled": true, - "propagationTypes": [ - "SERVICE_TO_PROCESS_GROUP_LIKE", - "SERVICE_TO_HOST_LIKE" - ], - "type": "SERVICE" - }, - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "{{.tag}}" - } - }, - "key": { - "attribute": "PROCESS_GROUP_TAGS" - } - } - ], - "enabled": true, - "propagationTypes": [ - "PROCESS_GROUP_TO_HOST" - ], - "type": "PROCESS_GROUP" - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_digital-key-composite-service/management-zone/README.md b/BMW-Dynatrace-config/CD_digital-key-composite-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_digital-key-composite-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_digital-key-composite-service/management-zone/default.json b/BMW-Dynatrace-config/CD_digital-key-composite-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_digital-key-composite-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_digital-key-composite-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_digital-key-composite-service/management-zone/management-zone.yaml index 5f090bd3..dfb799d9 100644 --- a/BMW-Dynatrace-config/CD_digital-key-composite-service/management-zone/management-zone.yaml +++ b/BMW-Dynatrace-config/CD_digital-key-composite-service/management-zone/management-zone.yaml @@ -1,20 +1,6 @@ -CDdigital-key-composite-service.CN-PreProd: -- name: CD_digital-key-composite-service -- tag: digital-key-composite-service -CDdigital-key-composite-service.CN-Prod: -- name: CD_digital-key-composite-service -- tag: digital-key-composite-service -CDdigital-key-composite-service.EMEA-PreProd: -- name: CD_digital-key-composite-service -- tag: digital-key-composite-service -CDdigital-key-composite-service.EMEA-Prod: -- name: CD_digital-key-composite-service -- tag: digital-key-composite-service -CDdigital-key-composite-service.NA-PreProd: -- name: CD_digital-key-composite-service -- tag: digital-key-composite-service -CDdigital-key-composite-service.NA-Prod: -- name: CD_digital-key-composite-service -- tag: digital-key-composite-service config: -- CDdigital-key-composite-service: CDdigital-key-composite-service.json +- CDdigital-key-composite-service: default.json + +CDdigital-key-composite-service: +- name: CD_digital-key-composite-service +- tag: digital-key-composite-service diff --git a/BMW-Dynatrace-config/CD_digital-key-composite-service/notification/README.md b/BMW-Dynatrace-config/CD_digital-key-composite-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_digital-key-composite-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_digital-key-composite-service/notification/email.json b/BMW-Dynatrace-config/CD_digital-key-composite-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_digital-key-composite-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_digital-key-composite-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_digital-key-composite-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_digital-key-composite-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_digital-key-composite-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_digital-key-composite-service/notification/notification.yaml new file mode 100644 index 00000000..07cfed7e --- /dev/null +++ b/BMW-Dynatrace-config/CD_digital-key-composite-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDdigital-key-composite-service-PROD: msTeams.json +- CDdigital-key-composite-service-E2E: msTeams.json +- CDdigital-key-composite-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdigital-key-composite-service-PROD: +- name: CD_digital-key-composite-service PROD +- alertingProfile: CD_digital-key-composite-service/alerting-profile/CDdigital-key-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdigital-key-composite-service-PROD.EMEA-Prod: +- name: CD_digital-key-composite-service PROD +- alertingProfile: CD_digital-key-composite-service/alerting-profile/CDdigital-key-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDdigital-key-composite-service-PROD.NA-Prod: +- name: CD_digital-key-composite-service PROD +- alertingProfile: CD_digital-key-composite-service/alerting-profile/CDdigital-key-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDdigital-key-composite-service-PROD.CN-Prod: +- name: CD_digital-key-composite-service PROD +- alertingProfile: CD_digital-key-composite-service/alerting-profile/CDdigital-key-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdigital-key-composite-service-E2E: +- name: CD_digital-key-composite-service E2E +- alertingProfile: CD_digital-key-composite-service/alerting-profile/CDdigital-key-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdigital-key-composite-service-E2E.EMEA-Prod: +- name: CD_digital-key-composite-service E2E +- alertingProfile: CD_digital-key-composite-service/alerting-profile/CDdigital-key-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDdigital-key-composite-service-E2E.NA-Prod: +- name: CD_digital-key-composite-service E2E +- alertingProfile: CD_digital-key-composite-service/alerting-profile/CDdigital-key-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDdigital-key-composite-service-E2E.CN-Prod: +- name: CD_digital-key-composite-service E2E +- alertingProfile: CD_digital-key-composite-service/alerting-profile/CDdigital-key-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdigital-key-composite-service-INT: +- name: CD_digital-key-composite-service INT +- alertingProfile: CD_digital-key-composite-service/alerting-profile/CDdigital-key-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdigital-key-composite-service-INT.EMEA-PreProd: +- name: CD_digital-key-composite-service INT +- alertingProfile: CD_digital-key-composite-service/alerting-profile/CDdigital-key-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDdigital-key-composite-service-INT.NA-PreProd: +- name: CD_digital-key-composite-service INT +- alertingProfile: CD_digital-key-composite-service/alerting-profile/CDdigital-key-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDdigital-key-composite-service-INT.CN-PreProd: +- name: CD_digital-key-composite-service INT +- alertingProfile: CD_digital-key-composite-service/alerting-profile/CDdigital-key-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_digital-key-composite-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_digital-key-composite-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_digital-key-composite-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_digital-key-composite-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_digital-key-composite-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_digital-key-composite-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_digital-key-composite-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_digital-key-composite-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..49d0620b --- /dev/null +++ b/BMW-Dynatrace-config/CD_digital-key-composite-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- digital-key-composite-service: default.json + +digital-key-composite-service: +- name: CD_digital-key-composite-service - +- mzName: CD_digital-key-composite-service/management-zone/CDdigital-key-composite-service.name +- mzId: CD_digital-key-composite-service/management-zone/CDdigital-key-composite-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_discover-bmw-composite-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..6c36d979 --- /dev/null +++ b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDdiscover-bmw-composite-service-PROD: default.json +- CDdiscover-bmw-composite-service-E2E: default.json +- CDdiscover-bmw-composite-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDdiscover-bmw-composite-service-PROD: +- name: CD_discover-bmw-composite-service PROD +- tag: discover-bmw-composite-service +- mzId: CD_discover-bmw-composite-service/management-zone/CDdiscover-bmw-composite-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDdiscover-bmw-composite-service-PROD.EMEA-Prod: +- name: CD_discover-bmw-composite-service PROD +- tag: discover-bmw-composite-service +- mzId: CD_discover-bmw-composite-service/management-zone/CDdiscover-bmw-composite-service.id +- env: PROD +- skipDeployment: "false" +CDdiscover-bmw-composite-service-PROD.NA-Prod: +- name: CD_discover-bmw-composite-service PROD +- tag: discover-bmw-composite-service +- mzId: CD_discover-bmw-composite-service/management-zone/CDdiscover-bmw-composite-service.id +- env: PROD +- skipDeployment: "false" +CDdiscover-bmw-composite-service-PROD.CN-Prod: +- name: CD_discover-bmw-composite-service PROD +- tag: discover-bmw-composite-service +- mzId: CD_discover-bmw-composite-service/management-zone/CDdiscover-bmw-composite-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDdiscover-bmw-composite-service-E2E: +- name: CD_discover-bmw-composite-service E2E +- tag: discover-bmw-composite-service +- mzId: CD_discover-bmw-composite-service/management-zone/CDdiscover-bmw-composite-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDdiscover-bmw-composite-service-E2E.EMEA-Prod: +- name: CD_discover-bmw-composite-service E2E +- tag: discover-bmw-composite-service +- mzId: CD_discover-bmw-composite-service/management-zone/CDdiscover-bmw-composite-service.id +- env: E2E +- skipDeployment: "false" +CDdiscover-bmw-composite-service-E2E.NA-Prod: +- name: CD_discover-bmw-composite-service E2E +- tag: discover-bmw-composite-service +- mzId: CD_discover-bmw-composite-service/management-zone/CDdiscover-bmw-composite-service.id +- env: E2E +- skipDeployment: "false" +CDdiscover-bmw-composite-service-E2E.CN-Prod: +- name: CD_discover-bmw-composite-service E2E +- tag: discover-bmw-composite-service +- mzId: CD_discover-bmw-composite-service/management-zone/CDdiscover-bmw-composite-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDdiscover-bmw-composite-service-INT: +- name: CD_discover-bmw-composite-service INT +- tag: discover-bmw-composite-service +- mzId: CD_discover-bmw-composite-service/management-zone/CDdiscover-bmw-composite-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDdiscover-bmw-composite-service-INT.EMEA-PreProd: +- name: CD_discover-bmw-composite-service INT +- tag: discover-bmw-composite-service +- mzId: CD_discover-bmw-composite-service/management-zone/CDdiscover-bmw-composite-service.id +- env: INT +- skipDeployment: "false" +CDdiscover-bmw-composite-service-INT.NA-PreProd: +- name: CD_discover-bmw-composite-service INT +- tag: discover-bmw-composite-service +- mzId: CD_discover-bmw-composite-service/management-zone/CDdiscover-bmw-composite-service.id +- env: INT +- skipDeployment: "false" +CDdiscover-bmw-composite-service-INT.CN-PreProd: +- name: CD_discover-bmw-composite-service INT +- tag: discover-bmw-composite-service +- mzId: CD_discover-bmw-composite-service/management-zone/CDdiscover-bmw-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_discover-bmw-composite-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_discover-bmw-composite-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_discover-bmw-composite-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_discover-bmw-composite-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_discover-bmw-composite-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_discover-bmw-composite-service/dashboard/README.md b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_discover-bmw-composite-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..402fa51c --- /dev/null +++ b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDdiscover-bmw-composite-service-PROD-E2E: defaultPRODE2E.json +- CDdiscover-bmw-composite-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDdiscover-bmw-composite-service-PROD-E2E: +- name: CD_discover-bmw-composite-service PROD +- mzName: CD_discover-bmw-composite-service/management-zone/CDdiscover-bmw-composite-service.name +- mzId: CD_discover-bmw-composite-service/management-zone/CDdiscover-bmw-composite-service.id +- skipDeployment: "true" +#Configuration +CDdiscover-bmw-composite-service-PROD-E2E.EMEA-Prod: +- name: CD_discover-bmw-composite-service PROD +- mzName: CD_discover-bmw-composite-service/management-zone/CDdiscover-bmw-composite-service.name +- mzId: CD_discover-bmw-composite-service/management-zone/CDdiscover-bmw-composite-service.id +- tag: discover-bmw-composite-service +- skipDeployment: "false" +CDdiscover-bmw-composite-service-PROD-E2E.NA-Prod: +- name: CD_discover-bmw-composite-service PROD +- mzName: CD_discover-bmw-composite-service/management-zone/CDdiscover-bmw-composite-service.name +- mzId: CD_discover-bmw-composite-service/management-zone/CDdiscover-bmw-composite-service.id +- tag: discover-bmw-composite-service +- skipDeployment: "false" +CDdiscover-bmw-composite-service-PROD-E2E.CN-Prod: +- name: CD_discover-bmw-composite-service PROD +- mzName: CD_discover-bmw-composite-service/management-zone/CDdiscover-bmw-composite-service.name +- mzId: CD_discover-bmw-composite-service/management-zone/CDdiscover-bmw-composite-service.id +- tag: discover-bmw-composite-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDdiscover-bmw-composite-service-INT-TEST: +- name: CD_discover-bmw-composite-service INT-TEST +- mzName: CD_discover-bmw-composite-service/management-zone/CDdiscover-bmw-composite-service.name +- mzId: CD_discover-bmw-composite-service/management-zone/CDdiscover-bmw-composite-service.id +- tag: discover-bmw-composite-service +- skipDeployment: "true" +#Configuration +CDdiscover-bmw-composite-service-INT-TEST.EMEA-PreProd: +- name: CD_discover-bmw-composite-service INT-TEST +- mzName: CD_discover-bmw-composite-service/management-zone/CDdiscover-bmw-composite-service.name +- mzId: CD_discover-bmw-composite-service/management-zone/CDdiscover-bmw-composite-service.id +- tag: discover-bmw-composite-service +- skipDeployment: "false" +CDdiscover-bmw-composite-service-INT-TEST.NA-PreProd: +- name: CD_discover-bmw-composite-service INT-TEST +- mzName: CD_discover-bmw-composite-service/management-zone/CDdiscover-bmw-composite-service.name +- mzId: CD_discover-bmw-composite-service/management-zone/CDdiscover-bmw-composite-service.id +- env: INT +- skipDeployment: "false" +CDdiscover-bmw-composite-service-INT-TEST.CN-PreProd: +- name: CD_discover-bmw-composite-service INT-TEST +- mzName: CD_discover-bmw-composite-service/management-zone/CDdiscover-bmw-composite-service.name +- mzId: CD_discover-bmw-composite-service/management-zone/CDdiscover-bmw-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_discover-bmw-composite-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_discover-bmw-composite-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_discover-bmw-composite-service/management-zone/README.md b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_discover-bmw-composite-service/management-zone/default.json b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_discover-bmw-composite-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..64029980 --- /dev/null +++ b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDdiscover-bmw-composite-service: default.json + +CDdiscover-bmw-composite-service: +- name: CD_discover-bmw-composite-service +- tag: discover-bmw-composite-service diff --git a/BMW-Dynatrace-config/CD_discover-bmw-composite-service/notification/README.md b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_discover-bmw-composite-service/notification/email.json b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_discover-bmw-composite-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_discover-bmw-composite-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/notification/notification.yaml new file mode 100644 index 00000000..2d57edd0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDdiscover-bmw-composite-service-PROD: msTeams.json +- CDdiscover-bmw-composite-service-E2E: msTeams.json +- CDdiscover-bmw-composite-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdiscover-bmw-composite-service-PROD: +- name: CD_discover-bmw-composite-service PROD +- alertingProfile: CD_discover-bmw-composite-service/alerting-profile/CDdiscover-bmw-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdiscover-bmw-composite-service-PROD.EMEA-Prod: +- name: CD_discover-bmw-composite-service PROD +- alertingProfile: CD_discover-bmw-composite-service/alerting-profile/CDdiscover-bmw-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDdiscover-bmw-composite-service-PROD.NA-Prod: +- name: CD_discover-bmw-composite-service PROD +- alertingProfile: CD_discover-bmw-composite-service/alerting-profile/CDdiscover-bmw-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDdiscover-bmw-composite-service-PROD.CN-Prod: +- name: CD_discover-bmw-composite-service PROD +- alertingProfile: CD_discover-bmw-composite-service/alerting-profile/CDdiscover-bmw-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdiscover-bmw-composite-service-E2E: +- name: CD_discover-bmw-composite-service E2E +- alertingProfile: CD_discover-bmw-composite-service/alerting-profile/CDdiscover-bmw-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdiscover-bmw-composite-service-E2E.EMEA-Prod: +- name: CD_discover-bmw-composite-service E2E +- alertingProfile: CD_discover-bmw-composite-service/alerting-profile/CDdiscover-bmw-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDdiscover-bmw-composite-service-E2E.NA-Prod: +- name: CD_discover-bmw-composite-service E2E +- alertingProfile: CD_discover-bmw-composite-service/alerting-profile/CDdiscover-bmw-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDdiscover-bmw-composite-service-E2E.CN-Prod: +- name: CD_discover-bmw-composite-service E2E +- alertingProfile: CD_discover-bmw-composite-service/alerting-profile/CDdiscover-bmw-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdiscover-bmw-composite-service-INT: +- name: CD_discover-bmw-composite-service INT +- alertingProfile: CD_discover-bmw-composite-service/alerting-profile/CDdiscover-bmw-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdiscover-bmw-composite-service-INT.EMEA-PreProd: +- name: CD_discover-bmw-composite-service INT +- alertingProfile: CD_discover-bmw-composite-service/alerting-profile/CDdiscover-bmw-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDdiscover-bmw-composite-service-INT.NA-PreProd: +- name: CD_discover-bmw-composite-service INT +- alertingProfile: CD_discover-bmw-composite-service/alerting-profile/CDdiscover-bmw-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDdiscover-bmw-composite-service-INT.CN-PreProd: +- name: CD_discover-bmw-composite-service INT +- alertingProfile: CD_discover-bmw-composite-service/alerting-profile/CDdiscover-bmw-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_discover-bmw-composite-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_discover-bmw-composite-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_discover-bmw-composite-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..5370d25d --- /dev/null +++ b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- discover-bmw-composite-service: default.json + +discover-bmw-composite-service: +- name: CD_discover-bmw-composite-service - +- mzName: CD_discover-bmw-composite-service/management-zone/CDdiscover-bmw-composite-service.name +- mzId: CD_discover-bmw-composite-service/management-zone/CDdiscover-bmw-composite-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dsd/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_dsd/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..b0dd055c --- /dev/null +++ b/BMW-Dynatrace-config/CD_dsd/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDdsd-PROD: default.json +- CDdsd-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDdsd-PROD: +- name: CD_dsd PROD +- tag: dsd +- mzId: CD_dsd/management-zone/CDdsd.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDdsd-PROD.EMEA-Prod: +- name: CD_dsd PROD +- tag: dsd +- mzId: CD_dsd/management-zone/CDdsd.id +- env: PROD +- skipDeployment: "false" +CDdsd-PROD.NA-Prod: +- name: CD_dsd PROD +- tag: dsd +- mzId: CD_dsd/management-zone/CDdsd.id +- env: PROD +- skipDeployment: "false" +CDdsd-PROD.CN-Prod: +- name: CD_dsd PROD +- tag: dsd +- mzId: CD_dsd/management-zone/CDdsd.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDdsd-INT: +- name: CD_dsd INT +- tag: dsd +- mzId: CD_dsd/management-zone/CDdsd.id +- env: INT +- skipDeployment: "true" +#Configuration +CDdsd-INT.EMEA-PreProd: +- name: CD_dsd INT +- tag: dsd +- mzId: CD_dsd/management-zone/CDdsd.id +- env: INT +- skipDeployment: "false" +CDdsd-INT.NA-PreProd: +- name: CD_dsd INT +- tag: dsd +- mzId: CD_dsd/management-zone/CDdsd.id +- env: INT +- skipDeployment: "false" +CDdsd-INT.CN-PreProd: +- name: CD_dsd INT +- tag: dsd +- mzId: CD_dsd/management-zone/CDdsd.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dsd/alerting-profile/default.json b/BMW-Dynatrace-config/CD_dsd/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dsd/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dsd/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_dsd/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_dsd/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dsd/custom-service-java/README.md b/BMW-Dynatrace-config/CD_dsd/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dsd/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dsd/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_dsd/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dsd/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dsd/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_dsd/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dsd/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dsd/dashboard/README.md b/BMW-Dynatrace-config/CD_dsd/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_dsd/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dsd/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_dsd/dashboard/dashboard.yaml new file mode 100644 index 00000000..8e924f68 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dsd/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDdsd-PROD-E2E: defaultPRODE2E.json +- CDdsd-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDdsd-PROD-E2E: +- name: CD_dsd PROD-E2E +- mzName: CD_dsd/management-zone/CDdsd.name +- mzId: CD_dsd/management-zone/CDdsd.id +- skipDeployment: "true" +#Configuration +CDdsd-PROD-E2E.EMEA-Prod: +- name: CD_dsd PROD-E2E +- mzName: CD_dsd/management-zone/CDdsd.name +- mzId: CD_dsd/management-zone/CDdsd.id +- tag: dsd +- skipDeployment: "false" +CDdsd-PROD-E2E.NA-Prod: +- name: CD_dsd PROD-E2E +- mzName: CD_dsd/management-zone/CDdsd.name +- mzId: CD_dsd/management-zone/CDdsd.id +- tag: dsd +- skipDeployment: "false" +CDdsd-PROD-E2E.CN-Prod: +- name: CD_dsd PROD-E2E +- mzName: CD_dsd/management-zone/CDdsd.name +- mzId: CD_dsd/management-zone/CDdsd.id +- tag: dsd +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDdsd-INT-TEST: +- name: CD_dsd INT-TEST +- mzName: CD_dsd/management-zone/CDdsd.name +- mzId: CD_dsd/management-zone/CDdsd.id +- tag: dsd +- skipDeployment: "true" +#Configuration +CDdsd-INT-TEST.EMEA-PreProd: +- name: CD_dsd INT-TEST +- mzName: CD_dsd/management-zone/CDdsd.name +- mzId: CD_dsd/management-zone/CDdsd.id +- tag: dsd +- skipDeployment: "false" +CDdsd-INT-TEST.NA-PreProd: +- name: CD_dsd INT-TEST +- mzName: CD_dsd/management-zone/CDdsd.name +- mzId: CD_dsd/management-zone/CDdsd.id +- env: INT +- skipDeployment: "false" +CDdsd-INT-TEST.CN-PreProd: +- name: CD_dsd INT-TEST +- mzName: CD_dsd/management-zone/CDdsd.name +- mzId: CD_dsd/management-zone/CDdsd.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dsd/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_dsd/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dsd/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dsd/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_dsd/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dsd/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dsd/management-zone/README.md b/BMW-Dynatrace-config/CD_dsd/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dsd/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_dsd/management-zone/default.json b/BMW-Dynatrace-config/CD_dsd/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_dsd/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dsd/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_dsd/management-zone/management-zone.yaml new file mode 100644 index 00000000..48a679f8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dsd/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDdsd: default.json + +CDdsd: +- name: CD_dsd +- tag: dsd diff --git a/BMW-Dynatrace-config/CD_dsd/notification/README.md b/BMW-Dynatrace-config/CD_dsd/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dsd/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dsd/notification/email.json b/BMW-Dynatrace-config/CD_dsd/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dsd/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dsd/notification/msTeams.json b/BMW-Dynatrace-config/CD_dsd/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dsd/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dsd/notification/notification.yaml b/BMW-Dynatrace-config/CD_dsd/notification/notification.yaml new file mode 100644 index 00000000..b98d439c --- /dev/null +++ b/BMW-Dynatrace-config/CD_dsd/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDdsd-PROD: msTeams.json +- CDdsd-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdsd-PROD: +- name: CD_dsd PROD +- alertingProfile: CD_dsd/alerting-profile/CDdsd-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdsd-PROD.EMEA-Prod: +- name: CD_dsd PROD +- alertingProfile: CD_dsd/alerting-profile/CDdsd-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDdsd-PROD.NA-Prod: +- name: CD_dsd PROD +- alertingProfile: CD_dsd/alerting-profile/CDdsd-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDdsd-PROD.CN-Prod: +- name: CD_dsd PROD +- alertingProfile: CD_dsd/alerting-profile/CDdsd-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDdsd-INT: +- name: CD_dsd INT +- alertingProfile: CD_dsd/alerting-profile/CDdsd-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDdsd-INT.EMEA-PreProd: +- name: CD_dsd INT +- alertingProfile: CD_dsd/alerting-profile/CDdsd-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDdsd-INT.NA-PreProd: +- name: CD_dsd INT +- alertingProfile: CD_dsd/alerting-profile/CDdsd-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDdsd-INT.CN-PreProd: +- name: CD_dsd INT +- alertingProfile: CD_dsd/alerting-profile/CDdsd-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dsd/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_dsd/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_dsd/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dsd/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_dsd/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_dsd/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dsd/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_dsd/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..63892942 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dsd/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- dsd: default.json + +dsd: +- name: CD_dsd - +- mzName: CD_dsd/management-zone/CDdsd.name +- mzId: CD_dsd/management-zone/CDdsd.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_eadb/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_eadb/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..44aca1ef --- /dev/null +++ b/BMW-Dynatrace-config/CD_eadb/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDeadb-PROD: default.json +- CDeadb-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDeadb-PROD: +- name: CD_eadb PROD +- tag: eadb +- mzId: CD_eadb/management-zone/CDeadb.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDeadb-PROD.EMEA-Prod: +- name: CD_eadb PROD +- tag: eadb +- mzId: CD_eadb/management-zone/CDeadb.id +- env: PROD +- skipDeployment: "false" +CDeadb-PROD.NA-Prod: +- name: CD_eadb PROD +- tag: eadb +- mzId: CD_eadb/management-zone/CDeadb.id +- env: PROD +- skipDeployment: "false" +CDeadb-PROD.CN-Prod: +- name: CD_eadb PROD +- tag: eadb +- mzId: CD_eadb/management-zone/CDeadb.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDeadb-INT: +- name: CD_eadb INT +- tag: eadb +- mzId: CD_eadb/management-zone/CDeadb.id +- env: INT +- skipDeployment: "true" +#Configuration +CDeadb-INT.EMEA-PreProd: +- name: CD_eadb INT +- tag: eadb +- mzId: CD_eadb/management-zone/CDeadb.id +- env: INT +- skipDeployment: "false" +CDeadb-INT.NA-PreProd: +- name: CD_eadb INT +- tag: eadb +- mzId: CD_eadb/management-zone/CDeadb.id +- env: INT +- skipDeployment: "false" +CDeadb-INT.CN-PreProd: +- name: CD_eadb INT +- tag: eadb +- mzId: CD_eadb/management-zone/CDeadb.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_eadb/alerting-profile/default.json b/BMW-Dynatrace-config/CD_eadb/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_eadb/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_eadb/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_eadb/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_eadb/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_eadb/custom-service-java/README.md b/BMW-Dynatrace-config/CD_eadb/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_eadb/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_eadb/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_eadb/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_eadb/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_eadb/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_eadb/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_eadb/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_eadb/dashboard/README.md b/BMW-Dynatrace-config/CD_eadb/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_eadb/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_eadb/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_eadb/dashboard/dashboard.yaml new file mode 100644 index 00000000..35ee46be --- /dev/null +++ b/BMW-Dynatrace-config/CD_eadb/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDeadb-PROD-E2E: defaultPRODE2E.json +- CDeadb-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDeadb-PROD-E2E: +- name: CD_eadb PROD-E2E +- mzName: CD_eadb/management-zone/CDeadb.name +- mzId: CD_eadb/management-zone/CDeadb.id +- skipDeployment: "true" +#Configuration +CDeadb-PROD-E2E.EMEA-Prod: +- name: CD_eadb PROD-E2E +- mzName: CD_eadb/management-zone/CDeadb.name +- mzId: CD_eadb/management-zone/CDeadb.id +- tag: eadb +- skipDeployment: "false" +CDeadb-PROD-E2E.NA-Prod: +- name: CD_eadb PROD-E2E +- mzName: CD_eadb/management-zone/CDeadb.name +- mzId: CD_eadb/management-zone/CDeadb.id +- tag: eadb +- skipDeployment: "false" +CDeadb-PROD-E2E.CN-Prod: +- name: CD_eadb PROD-E2E +- mzName: CD_eadb/management-zone/CDeadb.name +- mzId: CD_eadb/management-zone/CDeadb.id +- tag: eadb +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDeadb-INT-TEST: +- name: CD_eadb INT-TEST +- mzName: CD_eadb/management-zone/CDeadb.name +- mzId: CD_eadb/management-zone/CDeadb.id +- tag: eadb +- skipDeployment: "true" +#Configuration +CDeadb-INT-TEST.EMEA-PreProd: +- name: CD_eadb INT-TEST +- mzName: CD_eadb/management-zone/CDeadb.name +- mzId: CD_eadb/management-zone/CDeadb.id +- tag: eadb +- skipDeployment: "false" +CDeadb-INT-TEST.NA-PreProd: +- name: CD_eadb INT-TEST +- mzName: CD_eadb/management-zone/CDeadb.name +- mzId: CD_eadb/management-zone/CDeadb.id +- env: INT +- skipDeployment: "false" +CDeadb-INT-TEST.CN-PreProd: +- name: CD_eadb INT-TEST +- mzName: CD_eadb/management-zone/CDeadb.name +- mzId: CD_eadb/management-zone/CDeadb.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_eadb/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_eadb/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_eadb/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_eadb/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_eadb/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_eadb/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_eadb/management-zone/README.md b/BMW-Dynatrace-config/CD_eadb/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_eadb/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_eadb/management-zone/default.json b/BMW-Dynatrace-config/CD_eadb/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_eadb/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_eadb/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_eadb/management-zone/management-zone.yaml new file mode 100644 index 00000000..cd382a56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_eadb/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDeadb: default.json + +CDeadb: +- name: CD_eadb +- tag: eadb diff --git a/BMW-Dynatrace-config/CD_eadb/notification/README.md b/BMW-Dynatrace-config/CD_eadb/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_eadb/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_eadb/notification/email.json b/BMW-Dynatrace-config/CD_eadb/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_eadb/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_eadb/notification/msTeams.json b/BMW-Dynatrace-config/CD_eadb/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_eadb/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_eadb/notification/notification.yaml b/BMW-Dynatrace-config/CD_eadb/notification/notification.yaml new file mode 100644 index 00000000..2e176410 --- /dev/null +++ b/BMW-Dynatrace-config/CD_eadb/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDeadb-PROD: msTeams.json +- CDeadb-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDeadb-PROD: +- name: CD_eadb PROD +- alertingProfile: CD_eadb/alerting-profile/CDeadb-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDeadb-PROD.EMEA-Prod: +- name: CD_eadb PROD +- alertingProfile: CD_eadb/alerting-profile/CDeadb-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDeadb-PROD.NA-Prod: +- name: CD_eadb PROD +- alertingProfile: CD_eadb/alerting-profile/CDeadb-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDeadb-PROD.CN-Prod: +- name: CD_eadb PROD +- alertingProfile: CD_eadb/alerting-profile/CDeadb-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDeadb-INT: +- name: CD_eadb INT +- alertingProfile: CD_eadb/alerting-profile/CDeadb-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDeadb-INT.EMEA-PreProd: +- name: CD_eadb INT +- alertingProfile: CD_eadb/alerting-profile/CDeadb-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDeadb-INT.NA-PreProd: +- name: CD_eadb INT +- alertingProfile: CD_eadb/alerting-profile/CDeadb-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDeadb-INT.CN-PreProd: +- name: CD_eadb INT +- alertingProfile: CD_eadb/alerting-profile/CDeadb-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_eadb/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_eadb/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_eadb/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_eadb/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_eadb/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_eadb/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_eadb/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_eadb/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..451a7f73 --- /dev/null +++ b/BMW-Dynatrace-config/CD_eadb/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- eadb: default.json + +eadb: +- name: CD_eadb - +- mzName: CD_eadb/management-zone/CDeadb.name +- mzId: CD_eadb/management-zone/CDeadb.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercaf/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_ercaf/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..17ebfd0a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercaf/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDercaf-PROD: default.json +- CDercaf-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDercaf-PROD: +- name: CD_ercaf PROD +- tag: ercaf +- mzId: CD_ercaf/management-zone/CDercaf.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDercaf-PROD.EMEA-Prod: +- name: CD_ercaf PROD +- tag: ercaf +- mzId: CD_ercaf/management-zone/CDercaf.id +- env: PROD +- skipDeployment: "false" +CDercaf-PROD.NA-Prod: +- name: CD_ercaf PROD +- tag: ercaf +- mzId: CD_ercaf/management-zone/CDercaf.id +- env: PROD +- skipDeployment: "false" +CDercaf-PROD.CN-Prod: +- name: CD_ercaf PROD +- tag: ercaf +- mzId: CD_ercaf/management-zone/CDercaf.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDercaf-INT: +- name: CD_ercaf INT +- tag: ercaf +- mzId: CD_ercaf/management-zone/CDercaf.id +- env: INT +- skipDeployment: "true" +#Configuration +CDercaf-INT.EMEA-PreProd: +- name: CD_ercaf INT +- tag: ercaf +- mzId: CD_ercaf/management-zone/CDercaf.id +- env: INT +- skipDeployment: "false" +CDercaf-INT.NA-PreProd: +- name: CD_ercaf INT +- tag: ercaf +- mzId: CD_ercaf/management-zone/CDercaf.id +- env: INT +- skipDeployment: "false" +CDercaf-INT.CN-PreProd: +- name: CD_ercaf INT +- tag: ercaf +- mzId: CD_ercaf/management-zone/CDercaf.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercaf/alerting-profile/default.json b/BMW-Dynatrace-config/CD_ercaf/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercaf/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercaf/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_ercaf/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercaf/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercaf/custom-service-java/README.md b/BMW-Dynatrace-config/CD_ercaf/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercaf/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercaf/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_ercaf/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercaf/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercaf/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_ercaf/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercaf/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercaf/dashboard/README.md b/BMW-Dynatrace-config/CD_ercaf/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercaf/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercaf/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_ercaf/dashboard/dashboard.yaml new file mode 100644 index 00000000..e6baec27 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercaf/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDercaf-PROD-E2E: defaultPRODE2E.json +- CDercaf-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDercaf-PROD-E2E: +- name: CD_ercaf PROD-E2E +- mzName: CD_ercaf/management-zone/CDercaf.name +- mzId: CD_ercaf/management-zone/CDercaf.id +- skipDeployment: "true" +#Configuration +CDercaf-PROD-E2E.EMEA-Prod: +- name: CD_ercaf PROD-E2E +- mzName: CD_ercaf/management-zone/CDercaf.name +- mzId: CD_ercaf/management-zone/CDercaf.id +- tag: ercaf +- skipDeployment: "false" +CDercaf-PROD-E2E.NA-Prod: +- name: CD_ercaf PROD-E2E +- mzName: CD_ercaf/management-zone/CDercaf.name +- mzId: CD_ercaf/management-zone/CDercaf.id +- tag: ercaf +- skipDeployment: "false" +CDercaf-PROD-E2E.CN-Prod: +- name: CD_ercaf PROD-E2E +- mzName: CD_ercaf/management-zone/CDercaf.name +- mzId: CD_ercaf/management-zone/CDercaf.id +- tag: ercaf +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDercaf-INT-TEST: +- name: CD_ercaf INT-TEST +- mzName: CD_ercaf/management-zone/CDercaf.name +- mzId: CD_ercaf/management-zone/CDercaf.id +- tag: ercaf +- skipDeployment: "true" +#Configuration +CDercaf-INT-TEST.EMEA-PreProd: +- name: CD_ercaf INT-TEST +- mzName: CD_ercaf/management-zone/CDercaf.name +- mzId: CD_ercaf/management-zone/CDercaf.id +- tag: ercaf +- skipDeployment: "false" +CDercaf-INT-TEST.NA-PreProd: +- name: CD_ercaf INT-TEST +- mzName: CD_ercaf/management-zone/CDercaf.name +- mzId: CD_ercaf/management-zone/CDercaf.id +- env: INT +- skipDeployment: "false" +CDercaf-INT-TEST.CN-PreProd: +- name: CD_ercaf INT-TEST +- mzName: CD_ercaf/management-zone/CDercaf.name +- mzId: CD_ercaf/management-zone/CDercaf.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercaf/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_ercaf/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercaf/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercaf/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_ercaf/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercaf/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercaf/management-zone/README.md b/BMW-Dynatrace-config/CD_ercaf/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercaf/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_ercaf/management-zone/default.json b/BMW-Dynatrace-config/CD_ercaf/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercaf/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercaf/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_ercaf/management-zone/management-zone.yaml new file mode 100644 index 00000000..a11b12ce --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercaf/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDercaf: default.json + +CDercaf: +- name: CD_ercaf +- tag: ercaf diff --git a/BMW-Dynatrace-config/CD_ercaf/notification/README.md b/BMW-Dynatrace-config/CD_ercaf/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercaf/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercaf/notification/email.json b/BMW-Dynatrace-config/CD_ercaf/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercaf/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercaf/notification/msTeams.json b/BMW-Dynatrace-config/CD_ercaf/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercaf/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercaf/notification/notification.yaml b/BMW-Dynatrace-config/CD_ercaf/notification/notification.yaml new file mode 100644 index 00000000..ff88476e --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercaf/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDercaf-PROD: msTeams.json +- CDercaf-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDercaf-PROD: +- name: CD_ercaf PROD +- alertingProfile: CD_ercaf/alerting-profile/CDercaf-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDercaf-PROD.EMEA-Prod: +- name: CD_ercaf PROD +- alertingProfile: CD_ercaf/alerting-profile/CDercaf-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDercaf-PROD.NA-Prod: +- name: CD_ercaf PROD +- alertingProfile: CD_ercaf/alerting-profile/CDercaf-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDercaf-PROD.CN-Prod: +- name: CD_ercaf PROD +- alertingProfile: CD_ercaf/alerting-profile/CDercaf-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDercaf-INT: +- name: CD_ercaf INT +- alertingProfile: CD_ercaf/alerting-profile/CDercaf-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDercaf-INT.EMEA-PreProd: +- name: CD_ercaf INT +- alertingProfile: CD_ercaf/alerting-profile/CDercaf-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDercaf-INT.NA-PreProd: +- name: CD_ercaf INT +- alertingProfile: CD_ercaf/alerting-profile/CDercaf-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDercaf-INT.CN-PreProd: +- name: CD_ercaf INT +- alertingProfile: CD_ercaf/alerting-profile/CDercaf-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercaf/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_ercaf/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercaf/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercaf/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_ercaf/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercaf/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercaf/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_ercaf/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..e24769ec --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercaf/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- ercaf: default.json + +ercaf: +- name: CD_ercaf - +- mzName: CD_ercaf/management-zone/CDercaf.name +- mzId: CD_ercaf/management-zone/CDercaf.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercr/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_ercr/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..0107691d --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercr/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDercr-PROD: default.json +- CDercr-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDercr-PROD: +- name: CD_ercr PROD +- tag: ercr +- mzId: CD_ercr/management-zone/CDercr.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDercr-PROD.EMEA-Prod: +- name: CD_ercr PROD +- tag: ercr +- mzId: CD_ercr/management-zone/CDercr.id +- env: PROD +- skipDeployment: "false" +CDercr-PROD.NA-Prod: +- name: CD_ercr PROD +- tag: ercr +- mzId: CD_ercr/management-zone/CDercr.id +- env: PROD +- skipDeployment: "false" +CDercr-PROD.CN-Prod: +- name: CD_ercr PROD +- tag: ercr +- mzId: CD_ercr/management-zone/CDercr.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDercr-INT: +- name: CD_ercr INT +- tag: ercr +- mzId: CD_ercr/management-zone/CDercr.id +- env: INT +- skipDeployment: "true" +#Configuration +CDercr-INT.EMEA-PreProd: +- name: CD_ercr INT +- tag: ercr +- mzId: CD_ercr/management-zone/CDercr.id +- env: INT +- skipDeployment: "false" +CDercr-INT.NA-PreProd: +- name: CD_ercr INT +- tag: ercr +- mzId: CD_ercr/management-zone/CDercr.id +- env: INT +- skipDeployment: "false" +CDercr-INT.CN-PreProd: +- name: CD_ercr INT +- tag: ercr +- mzId: CD_ercr/management-zone/CDercr.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercr/alerting-profile/default.json b/BMW-Dynatrace-config/CD_ercr/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercr/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercr/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_ercr/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercr/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercr/custom-service-java/README.md b/BMW-Dynatrace-config/CD_ercr/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercr/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercr/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_ercr/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercr/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercr/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_ercr/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercr/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercr/dashboard/README.md b/BMW-Dynatrace-config/CD_ercr/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercr/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercr/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_ercr/dashboard/dashboard.yaml new file mode 100644 index 00000000..71fabbe8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercr/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDercr-PROD-E2E: defaultPRODE2E.json +- CDercr-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDercr-PROD-E2E: +- name: CD_ercr PROD-E2E +- mzName: CD_ercr/management-zone/CDercr.name +- mzId: CD_ercr/management-zone/CDercr.id +- skipDeployment: "true" +#Configuration +CDercr-PROD-E2E.EMEA-Prod: +- name: CD_ercr PROD-E2E +- mzName: CD_ercr/management-zone/CDercr.name +- mzId: CD_ercr/management-zone/CDercr.id +- tag: ercr +- skipDeployment: "false" +CDercr-PROD-E2E.NA-Prod: +- name: CD_ercr PROD-E2E +- mzName: CD_ercr/management-zone/CDercr.name +- mzId: CD_ercr/management-zone/CDercr.id +- tag: ercr +- skipDeployment: "false" +CDercr-PROD-E2E.CN-Prod: +- name: CD_ercr PROD-E2E +- mzName: CD_ercr/management-zone/CDercr.name +- mzId: CD_ercr/management-zone/CDercr.id +- tag: ercr +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDercr-INT-TEST: +- name: CD_ercr INT-TEST +- mzName: CD_ercr/management-zone/CDercr.name +- mzId: CD_ercr/management-zone/CDercr.id +- tag: ercr +- skipDeployment: "true" +#Configuration +CDercr-INT-TEST.EMEA-PreProd: +- name: CD_ercr INT-TEST +- mzName: CD_ercr/management-zone/CDercr.name +- mzId: CD_ercr/management-zone/CDercr.id +- tag: ercr +- skipDeployment: "false" +CDercr-INT-TEST.NA-PreProd: +- name: CD_ercr INT-TEST +- mzName: CD_ercr/management-zone/CDercr.name +- mzId: CD_ercr/management-zone/CDercr.id +- env: INT +- skipDeployment: "false" +CDercr-INT-TEST.CN-PreProd: +- name: CD_ercr INT-TEST +- mzName: CD_ercr/management-zone/CDercr.name +- mzId: CD_ercr/management-zone/CDercr.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercr/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_ercr/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercr/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercr/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_ercr/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercr/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercr/management-zone/README.md b/BMW-Dynatrace-config/CD_ercr/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercr/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_ercr/management-zone/default.json b/BMW-Dynatrace-config/CD_ercr/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercr/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercr/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_ercr/management-zone/management-zone.yaml new file mode 100644 index 00000000..70d63f0a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercr/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDercr: default.json + +CDercr: +- name: CD_ercr +- tag: ercr diff --git a/BMW-Dynatrace-config/CD_ercr/notification/README.md b/BMW-Dynatrace-config/CD_ercr/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercr/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercr/notification/email.json b/BMW-Dynatrace-config/CD_ercr/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercr/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercr/notification/msTeams.json b/BMW-Dynatrace-config/CD_ercr/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercr/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercr/notification/notification.yaml b/BMW-Dynatrace-config/CD_ercr/notification/notification.yaml new file mode 100644 index 00000000..169ae6b2 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercr/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDercr-PROD: msTeams.json +- CDercr-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDercr-PROD: +- name: CD_ercr PROD +- alertingProfile: CD_ercr/alerting-profile/CDercr-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDercr-PROD.EMEA-Prod: +- name: CD_ercr PROD +- alertingProfile: CD_ercr/alerting-profile/CDercr-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDercr-PROD.NA-Prod: +- name: CD_ercr PROD +- alertingProfile: CD_ercr/alerting-profile/CDercr-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDercr-PROD.CN-Prod: +- name: CD_ercr PROD +- alertingProfile: CD_ercr/alerting-profile/CDercr-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDercr-INT: +- name: CD_ercr INT +- alertingProfile: CD_ercr/alerting-profile/CDercr-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDercr-INT.EMEA-PreProd: +- name: CD_ercr INT +- alertingProfile: CD_ercr/alerting-profile/CDercr-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDercr-INT.NA-PreProd: +- name: CD_ercr INT +- alertingProfile: CD_ercr/alerting-profile/CDercr-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDercr-INT.CN-PreProd: +- name: CD_ercr INT +- alertingProfile: CD_ercr/alerting-profile/CDercr-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercr/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_ercr/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercr/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercr/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_ercr/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercr/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercr/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_ercr/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..50d77eba --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercr/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- ercr: default.json + +ercr: +- name: CD_ercr - +- mzName: CD_ercr/management-zone/CDercr.name +- mzId: CD_ercr/management-zone/CDercr.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_erd/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_erd/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..480dd5fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_erd/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDerd-PROD: default.json +- CDerd-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDerd-PROD: +- name: CD_erd PROD +- tag: erd +- mzId: CD_erd/management-zone/CDerd.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDerd-PROD.EMEA-Prod: +- name: CD_erd PROD +- tag: erd +- mzId: CD_erd/management-zone/CDerd.id +- env: PROD +- skipDeployment: "false" +CDerd-PROD.NA-Prod: +- name: CD_erd PROD +- tag: erd +- mzId: CD_erd/management-zone/CDerd.id +- env: PROD +- skipDeployment: "false" +CDerd-PROD.CN-Prod: +- name: CD_erd PROD +- tag: erd +- mzId: CD_erd/management-zone/CDerd.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDerd-INT: +- name: CD_erd INT +- tag: erd +- mzId: CD_erd/management-zone/CDerd.id +- env: INT +- skipDeployment: "true" +#Configuration +CDerd-INT.EMEA-PreProd: +- name: CD_erd INT +- tag: erd +- mzId: CD_erd/management-zone/CDerd.id +- env: INT +- skipDeployment: "false" +CDerd-INT.NA-PreProd: +- name: CD_erd INT +- tag: erd +- mzId: CD_erd/management-zone/CDerd.id +- env: INT +- skipDeployment: "false" +CDerd-INT.CN-PreProd: +- name: CD_erd INT +- tag: erd +- mzId: CD_erd/management-zone/CDerd.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_erd/alerting-profile/default.json b/BMW-Dynatrace-config/CD_erd/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_erd/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_erd/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_erd/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_erd/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_erd/custom-service-java/README.md b/BMW-Dynatrace-config/CD_erd/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_erd/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_erd/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_erd/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_erd/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_erd/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_erd/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_erd/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_erd/dashboard/README.md b/BMW-Dynatrace-config/CD_erd/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_erd/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_erd/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_erd/dashboard/dashboard.yaml new file mode 100644 index 00000000..904a3a24 --- /dev/null +++ b/BMW-Dynatrace-config/CD_erd/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDerd-PROD-E2E: defaultPRODE2E.json +- CDerd-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDerd-PROD-E2E: +- name: CD_erd PROD-E2E +- mzName: CD_erd/management-zone/CDerd.name +- mzId: CD_erd/management-zone/CDerd.id +- skipDeployment: "true" +#Configuration +CDerd-PROD-E2E.EMEA-Prod: +- name: CD_erd PROD-E2E +- mzName: CD_erd/management-zone/CDerd.name +- mzId: CD_erd/management-zone/CDerd.id +- tag: erd +- skipDeployment: "false" +CDerd-PROD-E2E.NA-Prod: +- name: CD_erd PROD-E2E +- mzName: CD_erd/management-zone/CDerd.name +- mzId: CD_erd/management-zone/CDerd.id +- tag: erd +- skipDeployment: "false" +CDerd-PROD-E2E.CN-Prod: +- name: CD_erd PROD-E2E +- mzName: CD_erd/management-zone/CDerd.name +- mzId: CD_erd/management-zone/CDerd.id +- tag: erd +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDerd-INT-TEST: +- name: CD_erd INT-TEST +- mzName: CD_erd/management-zone/CDerd.name +- mzId: CD_erd/management-zone/CDerd.id +- tag: erd +- skipDeployment: "true" +#Configuration +CDerd-INT-TEST.EMEA-PreProd: +- name: CD_erd INT-TEST +- mzName: CD_erd/management-zone/CDerd.name +- mzId: CD_erd/management-zone/CDerd.id +- tag: erd +- skipDeployment: "false" +CDerd-INT-TEST.NA-PreProd: +- name: CD_erd INT-TEST +- mzName: CD_erd/management-zone/CDerd.name +- mzId: CD_erd/management-zone/CDerd.id +- env: INT +- skipDeployment: "false" +CDerd-INT-TEST.CN-PreProd: +- name: CD_erd INT-TEST +- mzName: CD_erd/management-zone/CDerd.name +- mzId: CD_erd/management-zone/CDerd.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_erd/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_erd/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_erd/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_erd/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_erd/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_erd/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_erd/management-zone/README.md b/BMW-Dynatrace-config/CD_erd/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_erd/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_erd/management-zone/default.json b/BMW-Dynatrace-config/CD_erd/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_erd/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_erd/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_erd/management-zone/management-zone.yaml new file mode 100644 index 00000000..714d85fb --- /dev/null +++ b/BMW-Dynatrace-config/CD_erd/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDerd: default.json + +CDerd: +- name: CD_erd +- tag: erd diff --git a/BMW-Dynatrace-config/CD_erd/notification/README.md b/BMW-Dynatrace-config/CD_erd/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_erd/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_erd/notification/email.json b/BMW-Dynatrace-config/CD_erd/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_erd/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_erd/notification/msTeams.json b/BMW-Dynatrace-config/CD_erd/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_erd/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_erd/notification/notification.yaml b/BMW-Dynatrace-config/CD_erd/notification/notification.yaml new file mode 100644 index 00000000..c798035a --- /dev/null +++ b/BMW-Dynatrace-config/CD_erd/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDerd-PROD: msTeams.json +- CDerd-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDerd-PROD: +- name: CD_erd PROD +- alertingProfile: CD_erd/alerting-profile/CDerd-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDerd-PROD.EMEA-Prod: +- name: CD_erd PROD +- alertingProfile: CD_erd/alerting-profile/CDerd-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDerd-PROD.NA-Prod: +- name: CD_erd PROD +- alertingProfile: CD_erd/alerting-profile/CDerd-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDerd-PROD.CN-Prod: +- name: CD_erd PROD +- alertingProfile: CD_erd/alerting-profile/CDerd-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDerd-INT: +- name: CD_erd INT +- alertingProfile: CD_erd/alerting-profile/CDerd-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDerd-INT.EMEA-PreProd: +- name: CD_erd INT +- alertingProfile: CD_erd/alerting-profile/CDerd-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDerd-INT.NA-PreProd: +- name: CD_erd INT +- alertingProfile: CD_erd/alerting-profile/CDerd-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDerd-INT.CN-PreProd: +- name: CD_erd INT +- alertingProfile: CD_erd/alerting-profile/CDerd-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_erd/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_erd/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_erd/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_erd/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_erd/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_erd/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_erd/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_erd/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..6a246907 --- /dev/null +++ b/BMW-Dynatrace-config/CD_erd/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- erd: default.json + +erd: +- name: CD_erd - +- mzName: CD_erd/management-zone/CDerd.name +- mzId: CD_erd/management-zone/CDerd.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esh/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_esh/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..68fa1e49 --- /dev/null +++ b/BMW-Dynatrace-config/CD_esh/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDesh-PROD: default.json +- CDesh-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDesh-PROD: +- name: CD_esh PROD +- tag: esh +- mzId: CD_esh/management-zone/CDesh.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDesh-PROD.EMEA-Prod: +- name: CD_esh PROD +- tag: esh +- mzId: CD_esh/management-zone/CDesh.id +- env: PROD +- skipDeployment: "false" +CDesh-PROD.NA-Prod: +- name: CD_esh PROD +- tag: esh +- mzId: CD_esh/management-zone/CDesh.id +- env: PROD +- skipDeployment: "false" +CDesh-PROD.CN-Prod: +- name: CD_esh PROD +- tag: esh +- mzId: CD_esh/management-zone/CDesh.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDesh-INT: +- name: CD_esh INT +- tag: esh +- mzId: CD_esh/management-zone/CDesh.id +- env: INT +- skipDeployment: "true" +#Configuration +CDesh-INT.EMEA-PreProd: +- name: CD_esh INT +- tag: esh +- mzId: CD_esh/management-zone/CDesh.id +- env: INT +- skipDeployment: "false" +CDesh-INT.NA-PreProd: +- name: CD_esh INT +- tag: esh +- mzId: CD_esh/management-zone/CDesh.id +- env: INT +- skipDeployment: "false" +CDesh-INT.CN-PreProd: +- name: CD_esh INT +- tag: esh +- mzId: CD_esh/management-zone/CDesh.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esh/alerting-profile/default.json b/BMW-Dynatrace-config/CD_esh/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_esh/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esh/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_esh/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_esh/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esh/custom-service-java/README.md b/BMW-Dynatrace-config/CD_esh/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_esh/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esh/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_esh/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_esh/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esh/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_esh/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_esh/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esh/dashboard/README.md b/BMW-Dynatrace-config/CD_esh/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_esh/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esh/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_esh/dashboard/dashboard.yaml new file mode 100644 index 00000000..df32b8a3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_esh/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDesh-PROD-E2E: defaultPRODE2E.json +- CDesh-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDesh-PROD-E2E: +- name: CD_esh PROD-E2E +- mzName: CD_esh/management-zone/CDesh.name +- mzId: CD_esh/management-zone/CDesh.id +- skipDeployment: "true" +#Configuration +CDesh-PROD-E2E.EMEA-Prod: +- name: CD_esh PROD-E2E +- mzName: CD_esh/management-zone/CDesh.name +- mzId: CD_esh/management-zone/CDesh.id +- tag: esh +- skipDeployment: "false" +CDesh-PROD-E2E.NA-Prod: +- name: CD_esh PROD-E2E +- mzName: CD_esh/management-zone/CDesh.name +- mzId: CD_esh/management-zone/CDesh.id +- tag: esh +- skipDeployment: "false" +CDesh-PROD-E2E.CN-Prod: +- name: CD_esh PROD-E2E +- mzName: CD_esh/management-zone/CDesh.name +- mzId: CD_esh/management-zone/CDesh.id +- tag: esh +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDesh-INT-TEST: +- name: CD_esh INT-TEST +- mzName: CD_esh/management-zone/CDesh.name +- mzId: CD_esh/management-zone/CDesh.id +- tag: esh +- skipDeployment: "true" +#Configuration +CDesh-INT-TEST.EMEA-PreProd: +- name: CD_esh INT-TEST +- mzName: CD_esh/management-zone/CDesh.name +- mzId: CD_esh/management-zone/CDesh.id +- tag: esh +- skipDeployment: "false" +CDesh-INT-TEST.NA-PreProd: +- name: CD_esh INT-TEST +- mzName: CD_esh/management-zone/CDesh.name +- mzId: CD_esh/management-zone/CDesh.id +- env: INT +- skipDeployment: "false" +CDesh-INT-TEST.CN-PreProd: +- name: CD_esh INT-TEST +- mzName: CD_esh/management-zone/CDesh.name +- mzId: CD_esh/management-zone/CDesh.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esh/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_esh/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_esh/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esh/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_esh/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_esh/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esh/management-zone/README.md b/BMW-Dynatrace-config/CD_esh/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_esh/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_esh/management-zone/default.json b/BMW-Dynatrace-config/CD_esh/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_esh/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esh/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_esh/management-zone/management-zone.yaml new file mode 100644 index 00000000..965032e3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_esh/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDesh: default.json + +CDesh: +- name: CD_esh +- tag: esh diff --git a/BMW-Dynatrace-config/CD_esh/notification/README.md b/BMW-Dynatrace-config/CD_esh/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_esh/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esh/notification/email.json b/BMW-Dynatrace-config/CD_esh/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_esh/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esh/notification/msTeams.json b/BMW-Dynatrace-config/CD_esh/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_esh/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esh/notification/notification.yaml b/BMW-Dynatrace-config/CD_esh/notification/notification.yaml new file mode 100644 index 00000000..c50f5710 --- /dev/null +++ b/BMW-Dynatrace-config/CD_esh/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDesh-PROD: msTeams.json +- CDesh-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDesh-PROD: +- name: CD_esh PROD +- alertingProfile: CD_esh/alerting-profile/CDesh-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDesh-PROD.EMEA-Prod: +- name: CD_esh PROD +- alertingProfile: CD_esh/alerting-profile/CDesh-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDesh-PROD.NA-Prod: +- name: CD_esh PROD +- alertingProfile: CD_esh/alerting-profile/CDesh-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDesh-PROD.CN-Prod: +- name: CD_esh PROD +- alertingProfile: CD_esh/alerting-profile/CDesh-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDesh-INT: +- name: CD_esh INT +- alertingProfile: CD_esh/alerting-profile/CDesh-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDesh-INT.EMEA-PreProd: +- name: CD_esh INT +- alertingProfile: CD_esh/alerting-profile/CDesh-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDesh-INT.NA-PreProd: +- name: CD_esh INT +- alertingProfile: CD_esh/alerting-profile/CDesh-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDesh-INT.CN-PreProd: +- name: CD_esh INT +- alertingProfile: CD_esh/alerting-profile/CDesh-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esh/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_esh/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_esh/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esh/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_esh/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_esh/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esh/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_esh/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..07e0a133 --- /dev/null +++ b/BMW-Dynatrace-config/CD_esh/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- esh: default.json + +esh: +- name: CD_esh - +- mzName: CD_esh/management-zone/CDesh.name +- mzId: CD_esh/management-zone/CDesh.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esim-composite-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_esim-composite-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..da245c3b --- /dev/null +++ b/BMW-Dynatrace-config/CD_esim-composite-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDesim-composite-service-PROD: default.json +- CDesim-composite-service-E2E: default.json +- CDesim-composite-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDesim-composite-service-PROD: +- name: CD_esim-composite-service PROD +- tag: esim-composite-service +- mzId: CD_esim-composite-service/management-zone/CDesim-composite-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDesim-composite-service-PROD.EMEA-Prod: +- name: CD_esim-composite-service PROD +- tag: esim-composite-service +- mzId: CD_esim-composite-service/management-zone/CDesim-composite-service.id +- env: PROD +- skipDeployment: "false" +CDesim-composite-service-PROD.NA-Prod: +- name: CD_esim-composite-service PROD +- tag: esim-composite-service +- mzId: CD_esim-composite-service/management-zone/CDesim-composite-service.id +- env: PROD +- skipDeployment: "false" +CDesim-composite-service-PROD.CN-Prod: +- name: CD_esim-composite-service PROD +- tag: esim-composite-service +- mzId: CD_esim-composite-service/management-zone/CDesim-composite-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDesim-composite-service-E2E: +- name: CD_esim-composite-service E2E +- tag: esim-composite-service +- mzId: CD_esim-composite-service/management-zone/CDesim-composite-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDesim-composite-service-E2E.EMEA-Prod: +- name: CD_esim-composite-service E2E +- tag: esim-composite-service +- mzId: CD_esim-composite-service/management-zone/CDesim-composite-service.id +- env: E2E +- skipDeployment: "false" +CDesim-composite-service-E2E.NA-Prod: +- name: CD_esim-composite-service E2E +- tag: esim-composite-service +- mzId: CD_esim-composite-service/management-zone/CDesim-composite-service.id +- env: E2E +- skipDeployment: "false" +CDesim-composite-service-E2E.CN-Prod: +- name: CD_esim-composite-service E2E +- tag: esim-composite-service +- mzId: CD_esim-composite-service/management-zone/CDesim-composite-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDesim-composite-service-INT: +- name: CD_esim-composite-service INT +- tag: esim-composite-service +- mzId: CD_esim-composite-service/management-zone/CDesim-composite-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDesim-composite-service-INT.EMEA-PreProd: +- name: CD_esim-composite-service INT +- tag: esim-composite-service +- mzId: CD_esim-composite-service/management-zone/CDesim-composite-service.id +- env: INT +- skipDeployment: "false" +CDesim-composite-service-INT.NA-PreProd: +- name: CD_esim-composite-service INT +- tag: esim-composite-service +- mzId: CD_esim-composite-service/management-zone/CDesim-composite-service.id +- env: INT +- skipDeployment: "false" +CDesim-composite-service-INT.CN-PreProd: +- name: CD_esim-composite-service INT +- tag: esim-composite-service +- mzId: CD_esim-composite-service/management-zone/CDesim-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esim-composite-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_esim-composite-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_esim-composite-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esim-composite-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_esim-composite-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_esim-composite-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esim-composite-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_esim-composite-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_esim-composite-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esim-composite-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_esim-composite-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_esim-composite-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esim-composite-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_esim-composite-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_esim-composite-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esim-composite-service/dashboard/README.md b/BMW-Dynatrace-config/CD_esim-composite-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_esim-composite-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esim-composite-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_esim-composite-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..a0995c7c --- /dev/null +++ b/BMW-Dynatrace-config/CD_esim-composite-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDesim-composite-service-PROD-E2E: defaultPRODE2E.json +- CDesim-composite-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDesim-composite-service-PROD-E2E: +- name: CD_esim-composite-service PROD +- mzName: CD_esim-composite-service/management-zone/CDesim-composite-service.name +- mzId: CD_esim-composite-service/management-zone/CDesim-composite-service.id +- skipDeployment: "true" +#Configuration +CDesim-composite-service-PROD-E2E.EMEA-Prod: +- name: CD_esim-composite-service PROD +- mzName: CD_esim-composite-service/management-zone/CDesim-composite-service.name +- mzId: CD_esim-composite-service/management-zone/CDesim-composite-service.id +- tag: esim-composite-service +- skipDeployment: "false" +CDesim-composite-service-PROD-E2E.NA-Prod: +- name: CD_esim-composite-service PROD +- mzName: CD_esim-composite-service/management-zone/CDesim-composite-service.name +- mzId: CD_esim-composite-service/management-zone/CDesim-composite-service.id +- tag: esim-composite-service +- skipDeployment: "false" +CDesim-composite-service-PROD-E2E.CN-Prod: +- name: CD_esim-composite-service PROD +- mzName: CD_esim-composite-service/management-zone/CDesim-composite-service.name +- mzId: CD_esim-composite-service/management-zone/CDesim-composite-service.id +- tag: esim-composite-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDesim-composite-service-INT-TEST: +- name: CD_esim-composite-service INT-TEST +- mzName: CD_esim-composite-service/management-zone/CDesim-composite-service.name +- mzId: CD_esim-composite-service/management-zone/CDesim-composite-service.id +- tag: esim-composite-service +- skipDeployment: "true" +#Configuration +CDesim-composite-service-INT-TEST.EMEA-PreProd: +- name: CD_esim-composite-service INT-TEST +- mzName: CD_esim-composite-service/management-zone/CDesim-composite-service.name +- mzId: CD_esim-composite-service/management-zone/CDesim-composite-service.id +- tag: esim-composite-service +- skipDeployment: "false" +CDesim-composite-service-INT-TEST.NA-PreProd: +- name: CD_esim-composite-service INT-TEST +- mzName: CD_esim-composite-service/management-zone/CDesim-composite-service.name +- mzId: CD_esim-composite-service/management-zone/CDesim-composite-service.id +- env: INT +- skipDeployment: "false" +CDesim-composite-service-INT-TEST.CN-PreProd: +- name: CD_esim-composite-service INT-TEST +- mzName: CD_esim-composite-service/management-zone/CDesim-composite-service.name +- mzId: CD_esim-composite-service/management-zone/CDesim-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esim-composite-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_esim-composite-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_esim-composite-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esim-composite-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_esim-composite-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_esim-composite-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esim-composite-service/management-zone/README.md b/BMW-Dynatrace-config/CD_esim-composite-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_esim-composite-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_esim-composite-service/management-zone/default.json b/BMW-Dynatrace-config/CD_esim-composite-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_esim-composite-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esim-composite-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_esim-composite-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..aae1b0c6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_esim-composite-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDesim-composite-service: default.json + +CDesim-composite-service: +- name: CD_esim-composite-service +- tag: esim-composite-service diff --git a/BMW-Dynatrace-config/CD_esim-composite-service/notification/README.md b/BMW-Dynatrace-config/CD_esim-composite-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_esim-composite-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esim-composite-service/notification/email.json b/BMW-Dynatrace-config/CD_esim-composite-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_esim-composite-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esim-composite-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_esim-composite-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_esim-composite-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esim-composite-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_esim-composite-service/notification/notification.yaml new file mode 100644 index 00000000..b207cceb --- /dev/null +++ b/BMW-Dynatrace-config/CD_esim-composite-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDesim-composite-service-PROD: msTeams.json +- CDesim-composite-service-E2E: msTeams.json +- CDesim-composite-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDesim-composite-service-PROD: +- name: CD_esim-composite-service PROD +- alertingProfile: CD_esim-composite-service/alerting-profile/CDesim-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDesim-composite-service-PROD.EMEA-Prod: +- name: CD_esim-composite-service PROD +- alertingProfile: CD_esim-composite-service/alerting-profile/CDesim-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDesim-composite-service-PROD.NA-Prod: +- name: CD_esim-composite-service PROD +- alertingProfile: CD_esim-composite-service/alerting-profile/CDesim-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDesim-composite-service-PROD.CN-Prod: +- name: CD_esim-composite-service PROD +- alertingProfile: CD_esim-composite-service/alerting-profile/CDesim-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDesim-composite-service-E2E: +- name: CD_esim-composite-service E2E +- alertingProfile: CD_esim-composite-service/alerting-profile/CDesim-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDesim-composite-service-E2E.EMEA-Prod: +- name: CD_esim-composite-service E2E +- alertingProfile: CD_esim-composite-service/alerting-profile/CDesim-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDesim-composite-service-E2E.NA-Prod: +- name: CD_esim-composite-service E2E +- alertingProfile: CD_esim-composite-service/alerting-profile/CDesim-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDesim-composite-service-E2E.CN-Prod: +- name: CD_esim-composite-service E2E +- alertingProfile: CD_esim-composite-service/alerting-profile/CDesim-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDesim-composite-service-INT: +- name: CD_esim-composite-service INT +- alertingProfile: CD_esim-composite-service/alerting-profile/CDesim-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDesim-composite-service-INT.EMEA-PreProd: +- name: CD_esim-composite-service INT +- alertingProfile: CD_esim-composite-service/alerting-profile/CDesim-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDesim-composite-service-INT.NA-PreProd: +- name: CD_esim-composite-service INT +- alertingProfile: CD_esim-composite-service/alerting-profile/CDesim-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDesim-composite-service-INT.CN-PreProd: +- name: CD_esim-composite-service INT +- alertingProfile: CD_esim-composite-service/alerting-profile/CDesim-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esim-composite-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_esim-composite-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_esim-composite-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esim-composite-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_esim-composite-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_esim-composite-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esim-composite-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_esim-composite-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..6dddc758 --- /dev/null +++ b/BMW-Dynatrace-config/CD_esim-composite-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- esim-composite-service: default.json + +esim-composite-service: +- name: CD_esim-composite-service - +- mzName: CD_esim-composite-service/management-zone/CDesim-composite-service.name +- mzId: CD_esim-composite-service/management-zone/CDesim-composite-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_explore-composite-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_explore-composite-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..9249538c --- /dev/null +++ b/BMW-Dynatrace-config/CD_explore-composite-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDexplore-composite-service-PROD: default.json +- CDexplore-composite-service-E2E: default.json +- CDexplore-composite-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDexplore-composite-service-PROD: +- name: CD_explore-composite-service PROD +- tag: explore-composite-service +- mzId: CD_explore-composite-service/management-zone/CDexplore-composite-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDexplore-composite-service-PROD.EMEA-Prod: +- name: CD_explore-composite-service PROD +- tag: explore-composite-service +- mzId: CD_explore-composite-service/management-zone/CDexplore-composite-service.id +- env: PROD +- skipDeployment: "false" +CDexplore-composite-service-PROD.NA-Prod: +- name: CD_explore-composite-service PROD +- tag: explore-composite-service +- mzId: CD_explore-composite-service/management-zone/CDexplore-composite-service.id +- env: PROD +- skipDeployment: "false" +CDexplore-composite-service-PROD.CN-Prod: +- name: CD_explore-composite-service PROD +- tag: explore-composite-service +- mzId: CD_explore-composite-service/management-zone/CDexplore-composite-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDexplore-composite-service-E2E: +- name: CD_explore-composite-service E2E +- tag: explore-composite-service +- mzId: CD_explore-composite-service/management-zone/CDexplore-composite-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDexplore-composite-service-E2E.EMEA-Prod: +- name: CD_explore-composite-service E2E +- tag: explore-composite-service +- mzId: CD_explore-composite-service/management-zone/CDexplore-composite-service.id +- env: E2E +- skipDeployment: "false" +CDexplore-composite-service-E2E.NA-Prod: +- name: CD_explore-composite-service E2E +- tag: explore-composite-service +- mzId: CD_explore-composite-service/management-zone/CDexplore-composite-service.id +- env: E2E +- skipDeployment: "false" +CDexplore-composite-service-E2E.CN-Prod: +- name: CD_explore-composite-service E2E +- tag: explore-composite-service +- mzId: CD_explore-composite-service/management-zone/CDexplore-composite-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDexplore-composite-service-INT: +- name: CD_explore-composite-service INT +- tag: explore-composite-service +- mzId: CD_explore-composite-service/management-zone/CDexplore-composite-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDexplore-composite-service-INT.EMEA-PreProd: +- name: CD_explore-composite-service INT +- tag: explore-composite-service +- mzId: CD_explore-composite-service/management-zone/CDexplore-composite-service.id +- env: INT +- skipDeployment: "false" +CDexplore-composite-service-INT.NA-PreProd: +- name: CD_explore-composite-service INT +- tag: explore-composite-service +- mzId: CD_explore-composite-service/management-zone/CDexplore-composite-service.id +- env: INT +- skipDeployment: "false" +CDexplore-composite-service-INT.CN-PreProd: +- name: CD_explore-composite-service INT +- tag: explore-composite-service +- mzId: CD_explore-composite-service/management-zone/CDexplore-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_explore-composite-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_explore-composite-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_explore-composite-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_explore-composite-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_explore-composite-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_explore-composite-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_explore-composite-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_explore-composite-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_explore-composite-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_explore-composite-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_explore-composite-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_explore-composite-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_explore-composite-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_explore-composite-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_explore-composite-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_explore-composite-service/dashboard/README.md b/BMW-Dynatrace-config/CD_explore-composite-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_explore-composite-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_explore-composite-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_explore-composite-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..7e3916c9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_explore-composite-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDexplore-composite-service-PROD-E2E: defaultPRODE2E.json +- CDexplore-composite-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDexplore-composite-service-PROD-E2E: +- name: CD_explore-composite-service PROD +- mzName: CD_explore-composite-service/management-zone/CDexplore-composite-service.name +- mzId: CD_explore-composite-service/management-zone/CDexplore-composite-service.id +- skipDeployment: "true" +#Configuration +CDexplore-composite-service-PROD-E2E.EMEA-Prod: +- name: CD_explore-composite-service PROD +- mzName: CD_explore-composite-service/management-zone/CDexplore-composite-service.name +- mzId: CD_explore-composite-service/management-zone/CDexplore-composite-service.id +- tag: explore-composite-service +- skipDeployment: "false" +CDexplore-composite-service-PROD-E2E.NA-Prod: +- name: CD_explore-composite-service PROD +- mzName: CD_explore-composite-service/management-zone/CDexplore-composite-service.name +- mzId: CD_explore-composite-service/management-zone/CDexplore-composite-service.id +- tag: explore-composite-service +- skipDeployment: "false" +CDexplore-composite-service-PROD-E2E.CN-Prod: +- name: CD_explore-composite-service PROD +- mzName: CD_explore-composite-service/management-zone/CDexplore-composite-service.name +- mzId: CD_explore-composite-service/management-zone/CDexplore-composite-service.id +- tag: explore-composite-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDexplore-composite-service-INT-TEST: +- name: CD_explore-composite-service INT-TEST +- mzName: CD_explore-composite-service/management-zone/CDexplore-composite-service.name +- mzId: CD_explore-composite-service/management-zone/CDexplore-composite-service.id +- tag: explore-composite-service +- skipDeployment: "true" +#Configuration +CDexplore-composite-service-INT-TEST.EMEA-PreProd: +- name: CD_explore-composite-service INT-TEST +- mzName: CD_explore-composite-service/management-zone/CDexplore-composite-service.name +- mzId: CD_explore-composite-service/management-zone/CDexplore-composite-service.id +- tag: explore-composite-service +- skipDeployment: "false" +CDexplore-composite-service-INT-TEST.NA-PreProd: +- name: CD_explore-composite-service INT-TEST +- mzName: CD_explore-composite-service/management-zone/CDexplore-composite-service.name +- mzId: CD_explore-composite-service/management-zone/CDexplore-composite-service.id +- env: INT +- skipDeployment: "false" +CDexplore-composite-service-INT-TEST.CN-PreProd: +- name: CD_explore-composite-service INT-TEST +- mzName: CD_explore-composite-service/management-zone/CDexplore-composite-service.name +- mzId: CD_explore-composite-service/management-zone/CDexplore-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_explore-composite-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_explore-composite-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_explore-composite-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_explore-composite-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_explore-composite-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_explore-composite-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_explore-composite-service/management-zone/README.md b/BMW-Dynatrace-config/CD_explore-composite-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_explore-composite-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_explore-composite-service/management-zone/default.json b/BMW-Dynatrace-config/CD_explore-composite-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_explore-composite-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_explore-composite-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_explore-composite-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..f4f4210b --- /dev/null +++ b/BMW-Dynatrace-config/CD_explore-composite-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDexplore-composite-service: default.json + +CDexplore-composite-service: +- name: CD_explore-composite-service +- tag: explore-composite-service diff --git a/BMW-Dynatrace-config/CD_explore-composite-service/notification/README.md b/BMW-Dynatrace-config/CD_explore-composite-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_explore-composite-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_explore-composite-service/notification/email.json b/BMW-Dynatrace-config/CD_explore-composite-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_explore-composite-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_explore-composite-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_explore-composite-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_explore-composite-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_explore-composite-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_explore-composite-service/notification/notification.yaml new file mode 100644 index 00000000..665911f1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_explore-composite-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDexplore-composite-service-PROD: msTeams.json +- CDexplore-composite-service-E2E: msTeams.json +- CDexplore-composite-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDexplore-composite-service-PROD: +- name: CD_explore-composite-service PROD +- alertingProfile: CD_explore-composite-service/alerting-profile/CDexplore-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDexplore-composite-service-PROD.EMEA-Prod: +- name: CD_explore-composite-service PROD +- alertingProfile: CD_explore-composite-service/alerting-profile/CDexplore-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDexplore-composite-service-PROD.NA-Prod: +- name: CD_explore-composite-service PROD +- alertingProfile: CD_explore-composite-service/alerting-profile/CDexplore-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDexplore-composite-service-PROD.CN-Prod: +- name: CD_explore-composite-service PROD +- alertingProfile: CD_explore-composite-service/alerting-profile/CDexplore-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDexplore-composite-service-E2E: +- name: CD_explore-composite-service E2E +- alertingProfile: CD_explore-composite-service/alerting-profile/CDexplore-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDexplore-composite-service-E2E.EMEA-Prod: +- name: CD_explore-composite-service E2E +- alertingProfile: CD_explore-composite-service/alerting-profile/CDexplore-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDexplore-composite-service-E2E.NA-Prod: +- name: CD_explore-composite-service E2E +- alertingProfile: CD_explore-composite-service/alerting-profile/CDexplore-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDexplore-composite-service-E2E.CN-Prod: +- name: CD_explore-composite-service E2E +- alertingProfile: CD_explore-composite-service/alerting-profile/CDexplore-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDexplore-composite-service-INT: +- name: CD_explore-composite-service INT +- alertingProfile: CD_explore-composite-service/alerting-profile/CDexplore-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDexplore-composite-service-INT.EMEA-PreProd: +- name: CD_explore-composite-service INT +- alertingProfile: CD_explore-composite-service/alerting-profile/CDexplore-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDexplore-composite-service-INT.NA-PreProd: +- name: CD_explore-composite-service INT +- alertingProfile: CD_explore-composite-service/alerting-profile/CDexplore-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDexplore-composite-service-INT.CN-PreProd: +- name: CD_explore-composite-service INT +- alertingProfile: CD_explore-composite-service/alerting-profile/CDexplore-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_explore-composite-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_explore-composite-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_explore-composite-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_explore-composite-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_explore-composite-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_explore-composite-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_explore-composite-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_explore-composite-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..f0e3d05b --- /dev/null +++ b/BMW-Dynatrace-config/CD_explore-composite-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- explore-composite-service: default.json + +explore-composite-service: +- name: CD_explore-composite-service - +- mzName: CD_explore-composite-service/management-zone/CDexplore-composite-service.name +- mzId: CD_explore-composite-service/management-zone/CDexplore-composite-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_feature-toggles-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_feature-toggles-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..dda0ca2b --- /dev/null +++ b/BMW-Dynatrace-config/CD_feature-toggles-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDfeature-toggles-service-PROD: default.json +- CDfeature-toggles-service-E2E: default.json +- CDfeature-toggles-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDfeature-toggles-service-PROD: +- name: CD_feature-toggles-service PROD +- tag: feature-toggles-service +- mzId: CD_feature-toggles-service/management-zone/CDfeature-toggles-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDfeature-toggles-service-PROD.EMEA-Prod: +- name: CD_feature-toggles-service PROD +- tag: feature-toggles-service +- mzId: CD_feature-toggles-service/management-zone/CDfeature-toggles-service.id +- env: PROD +- skipDeployment: "false" +CDfeature-toggles-service-PROD.NA-Prod: +- name: CD_feature-toggles-service PROD +- tag: feature-toggles-service +- mzId: CD_feature-toggles-service/management-zone/CDfeature-toggles-service.id +- env: PROD +- skipDeployment: "false" +CDfeature-toggles-service-PROD.CN-Prod: +- name: CD_feature-toggles-service PROD +- tag: feature-toggles-service +- mzId: CD_feature-toggles-service/management-zone/CDfeature-toggles-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDfeature-toggles-service-E2E: +- name: CD_feature-toggles-service E2E +- tag: feature-toggles-service +- mzId: CD_feature-toggles-service/management-zone/CDfeature-toggles-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDfeature-toggles-service-E2E.EMEA-Prod: +- name: CD_feature-toggles-service E2E +- tag: feature-toggles-service +- mzId: CD_feature-toggles-service/management-zone/CDfeature-toggles-service.id +- env: E2E +- skipDeployment: "false" +CDfeature-toggles-service-E2E.NA-Prod: +- name: CD_feature-toggles-service E2E +- tag: feature-toggles-service +- mzId: CD_feature-toggles-service/management-zone/CDfeature-toggles-service.id +- env: E2E +- skipDeployment: "false" +CDfeature-toggles-service-E2E.CN-Prod: +- name: CD_feature-toggles-service E2E +- tag: feature-toggles-service +- mzId: CD_feature-toggles-service/management-zone/CDfeature-toggles-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDfeature-toggles-service-INT: +- name: CD_feature-toggles-service INT +- tag: feature-toggles-service +- mzId: CD_feature-toggles-service/management-zone/CDfeature-toggles-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDfeature-toggles-service-INT.EMEA-PreProd: +- name: CD_feature-toggles-service INT +- tag: feature-toggles-service +- mzId: CD_feature-toggles-service/management-zone/CDfeature-toggles-service.id +- env: INT +- skipDeployment: "false" +CDfeature-toggles-service-INT.NA-PreProd: +- name: CD_feature-toggles-service INT +- tag: feature-toggles-service +- mzId: CD_feature-toggles-service/management-zone/CDfeature-toggles-service.id +- env: INT +- skipDeployment: "false" +CDfeature-toggles-service-INT.CN-PreProd: +- name: CD_feature-toggles-service INT +- tag: feature-toggles-service +- mzId: CD_feature-toggles-service/management-zone/CDfeature-toggles-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_feature-toggles-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_feature-toggles-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_feature-toggles-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_feature-toggles-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_feature-toggles-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_feature-toggles-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_feature-toggles-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_feature-toggles-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_feature-toggles-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_feature-toggles-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_feature-toggles-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_feature-toggles-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_feature-toggles-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_feature-toggles-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_feature-toggles-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_feature-toggles-service/dashboard/README.md b/BMW-Dynatrace-config/CD_feature-toggles-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_feature-toggles-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_feature-toggles-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_feature-toggles-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..cae47778 --- /dev/null +++ b/BMW-Dynatrace-config/CD_feature-toggles-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDfeature-toggles-service-PROD-E2E: defaultPRODE2E.json +- CDfeature-toggles-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDfeature-toggles-service-PROD-E2E: +- name: CD_feature-toggles-service PROD +- mzName: CD_feature-toggles-service/management-zone/CDfeature-toggles-service.name +- mzId: CD_feature-toggles-service/management-zone/CDfeature-toggles-service.id +- skipDeployment: "true" +#Configuration +CDfeature-toggles-service-PROD-E2E.EMEA-Prod: +- name: CD_feature-toggles-service PROD +- mzName: CD_feature-toggles-service/management-zone/CDfeature-toggles-service.name +- mzId: CD_feature-toggles-service/management-zone/CDfeature-toggles-service.id +- tag: feature-toggles-service +- skipDeployment: "false" +CDfeature-toggles-service-PROD-E2E.NA-Prod: +- name: CD_feature-toggles-service PROD +- mzName: CD_feature-toggles-service/management-zone/CDfeature-toggles-service.name +- mzId: CD_feature-toggles-service/management-zone/CDfeature-toggles-service.id +- tag: feature-toggles-service +- skipDeployment: "false" +CDfeature-toggles-service-PROD-E2E.CN-Prod: +- name: CD_feature-toggles-service PROD +- mzName: CD_feature-toggles-service/management-zone/CDfeature-toggles-service.name +- mzId: CD_feature-toggles-service/management-zone/CDfeature-toggles-service.id +- tag: feature-toggles-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDfeature-toggles-service-INT-TEST: +- name: CD_feature-toggles-service INT-TEST +- mzName: CD_feature-toggles-service/management-zone/CDfeature-toggles-service.name +- mzId: CD_feature-toggles-service/management-zone/CDfeature-toggles-service.id +- tag: feature-toggles-service +- skipDeployment: "true" +#Configuration +CDfeature-toggles-service-INT-TEST.EMEA-PreProd: +- name: CD_feature-toggles-service INT-TEST +- mzName: CD_feature-toggles-service/management-zone/CDfeature-toggles-service.name +- mzId: CD_feature-toggles-service/management-zone/CDfeature-toggles-service.id +- tag: feature-toggles-service +- skipDeployment: "false" +CDfeature-toggles-service-INT-TEST.NA-PreProd: +- name: CD_feature-toggles-service INT-TEST +- mzName: CD_feature-toggles-service/management-zone/CDfeature-toggles-service.name +- mzId: CD_feature-toggles-service/management-zone/CDfeature-toggles-service.id +- env: INT +- skipDeployment: "false" +CDfeature-toggles-service-INT-TEST.CN-PreProd: +- name: CD_feature-toggles-service INT-TEST +- mzName: CD_feature-toggles-service/management-zone/CDfeature-toggles-service.name +- mzId: CD_feature-toggles-service/management-zone/CDfeature-toggles-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_feature-toggles-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_feature-toggles-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_feature-toggles-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_feature-toggles-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_feature-toggles-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_feature-toggles-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_feature-toggles-service/management-zone/README.md b/BMW-Dynatrace-config/CD_feature-toggles-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_feature-toggles-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_feature-toggles-service/management-zone/default.json b/BMW-Dynatrace-config/CD_feature-toggles-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_feature-toggles-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_feature-toggles-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_feature-toggles-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..ba6739ca --- /dev/null +++ b/BMW-Dynatrace-config/CD_feature-toggles-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDfeature-toggles-service: default.json + +CDfeature-toggles-service: +- name: CD_feature-toggles-service +- tag: feature-toggles-service diff --git a/BMW-Dynatrace-config/CD_feature-toggles-service/notification/README.md b/BMW-Dynatrace-config/CD_feature-toggles-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_feature-toggles-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_feature-toggles-service/notification/email.json b/BMW-Dynatrace-config/CD_feature-toggles-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_feature-toggles-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_feature-toggles-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_feature-toggles-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_feature-toggles-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_feature-toggles-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_feature-toggles-service/notification/notification.yaml new file mode 100644 index 00000000..616c9bd8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_feature-toggles-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDfeature-toggles-service-PROD: msTeams.json +- CDfeature-toggles-service-E2E: msTeams.json +- CDfeature-toggles-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDfeature-toggles-service-PROD: +- name: CD_feature-toggles-service PROD +- alertingProfile: CD_feature-toggles-service/alerting-profile/CDfeature-toggles-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDfeature-toggles-service-PROD.EMEA-Prod: +- name: CD_feature-toggles-service PROD +- alertingProfile: CD_feature-toggles-service/alerting-profile/CDfeature-toggles-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDfeature-toggles-service-PROD.NA-Prod: +- name: CD_feature-toggles-service PROD +- alertingProfile: CD_feature-toggles-service/alerting-profile/CDfeature-toggles-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDfeature-toggles-service-PROD.CN-Prod: +- name: CD_feature-toggles-service PROD +- alertingProfile: CD_feature-toggles-service/alerting-profile/CDfeature-toggles-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDfeature-toggles-service-E2E: +- name: CD_feature-toggles-service E2E +- alertingProfile: CD_feature-toggles-service/alerting-profile/CDfeature-toggles-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDfeature-toggles-service-E2E.EMEA-Prod: +- name: CD_feature-toggles-service E2E +- alertingProfile: CD_feature-toggles-service/alerting-profile/CDfeature-toggles-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDfeature-toggles-service-E2E.NA-Prod: +- name: CD_feature-toggles-service E2E +- alertingProfile: CD_feature-toggles-service/alerting-profile/CDfeature-toggles-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDfeature-toggles-service-E2E.CN-Prod: +- name: CD_feature-toggles-service E2E +- alertingProfile: CD_feature-toggles-service/alerting-profile/CDfeature-toggles-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDfeature-toggles-service-INT: +- name: CD_feature-toggles-service INT +- alertingProfile: CD_feature-toggles-service/alerting-profile/CDfeature-toggles-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDfeature-toggles-service-INT.EMEA-PreProd: +- name: CD_feature-toggles-service INT +- alertingProfile: CD_feature-toggles-service/alerting-profile/CDfeature-toggles-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDfeature-toggles-service-INT.NA-PreProd: +- name: CD_feature-toggles-service INT +- alertingProfile: CD_feature-toggles-service/alerting-profile/CDfeature-toggles-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDfeature-toggles-service-INT.CN-PreProd: +- name: CD_feature-toggles-service INT +- alertingProfile: CD_feature-toggles-service/alerting-profile/CDfeature-toggles-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_feature-toggles-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_feature-toggles-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_feature-toggles-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_feature-toggles-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_feature-toggles-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_feature-toggles-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_feature-toggles-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_feature-toggles-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..237d60ff --- /dev/null +++ b/BMW-Dynatrace-config/CD_feature-toggles-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- feature-toggles-service: default.json + +feature-toggles-service: +- name: CD_feature-toggles-service - +- mzName: CD_feature-toggles-service/management-zone/CDfeature-toggles-service.name +- mzId: CD_feature-toggles-service/management-zone/CDfeature-toggles-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fmc/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_fmc/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..1828f7b2 --- /dev/null +++ b/BMW-Dynatrace-config/CD_fmc/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDfmc-PROD: default.json +- CDfmc-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDfmc-PROD: +- name: CD_fmc PROD +- tag: fmc +- mzId: CD_fmc/management-zone/CDfmc.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDfmc-PROD.EMEA-Prod: +- name: CD_fmc PROD +- tag: fmc +- mzId: CD_fmc/management-zone/CDfmc.id +- env: PROD +- skipDeployment: "false" +CDfmc-PROD.NA-Prod: +- name: CD_fmc PROD +- tag: fmc +- mzId: CD_fmc/management-zone/CDfmc.id +- env: PROD +- skipDeployment: "false" +CDfmc-PROD.CN-Prod: +- name: CD_fmc PROD +- tag: fmc +- mzId: CD_fmc/management-zone/CDfmc.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDfmc-INT: +- name: CD_fmc INT +- tag: fmc +- mzId: CD_fmc/management-zone/CDfmc.id +- env: INT +- skipDeployment: "true" +#Configuration +CDfmc-INT.EMEA-PreProd: +- name: CD_fmc INT +- tag: fmc +- mzId: CD_fmc/management-zone/CDfmc.id +- env: INT +- skipDeployment: "false" +CDfmc-INT.NA-PreProd: +- name: CD_fmc INT +- tag: fmc +- mzId: CD_fmc/management-zone/CDfmc.id +- env: INT +- skipDeployment: "false" +CDfmc-INT.CN-PreProd: +- name: CD_fmc INT +- tag: fmc +- mzId: CD_fmc/management-zone/CDfmc.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fmc/alerting-profile/default.json b/BMW-Dynatrace-config/CD_fmc/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_fmc/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fmc/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_fmc/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_fmc/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fmc/custom-service-java/README.md b/BMW-Dynatrace-config/CD_fmc/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_fmc/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fmc/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_fmc/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_fmc/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fmc/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_fmc/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_fmc/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fmc/dashboard/README.md b/BMW-Dynatrace-config/CD_fmc/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_fmc/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fmc/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_fmc/dashboard/dashboard.yaml new file mode 100644 index 00000000..ab56d3ab --- /dev/null +++ b/BMW-Dynatrace-config/CD_fmc/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDfmc-PROD-E2E: defaultPRODE2E.json +- CDfmc-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDfmc-PROD-E2E: +- name: CD_fmc PROD-E2E +- mzName: CD_fmc/management-zone/CDfmc.name +- mzId: CD_fmc/management-zone/CDfmc.id +- skipDeployment: "true" +#Configuration +CDfmc-PROD-E2E.EMEA-Prod: +- name: CD_fmc PROD-E2E +- mzName: CD_fmc/management-zone/CDfmc.name +- mzId: CD_fmc/management-zone/CDfmc.id +- tag: fmc +- skipDeployment: "false" +CDfmc-PROD-E2E.NA-Prod: +- name: CD_fmc PROD-E2E +- mzName: CD_fmc/management-zone/CDfmc.name +- mzId: CD_fmc/management-zone/CDfmc.id +- tag: fmc +- skipDeployment: "false" +CDfmc-PROD-E2E.CN-Prod: +- name: CD_fmc PROD-E2E +- mzName: CD_fmc/management-zone/CDfmc.name +- mzId: CD_fmc/management-zone/CDfmc.id +- tag: fmc +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDfmc-INT-TEST: +- name: CD_fmc INT-TEST +- mzName: CD_fmc/management-zone/CDfmc.name +- mzId: CD_fmc/management-zone/CDfmc.id +- tag: fmc +- skipDeployment: "true" +#Configuration +CDfmc-INT-TEST.EMEA-PreProd: +- name: CD_fmc INT-TEST +- mzName: CD_fmc/management-zone/CDfmc.name +- mzId: CD_fmc/management-zone/CDfmc.id +- tag: fmc +- skipDeployment: "false" +CDfmc-INT-TEST.NA-PreProd: +- name: CD_fmc INT-TEST +- mzName: CD_fmc/management-zone/CDfmc.name +- mzId: CD_fmc/management-zone/CDfmc.id +- env: INT +- skipDeployment: "false" +CDfmc-INT-TEST.CN-PreProd: +- name: CD_fmc INT-TEST +- mzName: CD_fmc/management-zone/CDfmc.name +- mzId: CD_fmc/management-zone/CDfmc.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fmc/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_fmc/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_fmc/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fmc/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_fmc/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_fmc/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fmc/management-zone/README.md b/BMW-Dynatrace-config/CD_fmc/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_fmc/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_fmc/management-zone/default.json b/BMW-Dynatrace-config/CD_fmc/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_fmc/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fmc/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_fmc/management-zone/management-zone.yaml new file mode 100644 index 00000000..58f104d4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_fmc/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDfmc: default.json + +CDfmc: +- name: CD_fmc +- tag: fmc diff --git a/BMW-Dynatrace-config/CD_fmc/notification/README.md b/BMW-Dynatrace-config/CD_fmc/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_fmc/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fmc/notification/email.json b/BMW-Dynatrace-config/CD_fmc/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_fmc/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fmc/notification/msTeams.json b/BMW-Dynatrace-config/CD_fmc/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_fmc/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fmc/notification/notification.yaml b/BMW-Dynatrace-config/CD_fmc/notification/notification.yaml new file mode 100644 index 00000000..4df7ac3a --- /dev/null +++ b/BMW-Dynatrace-config/CD_fmc/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDfmc-PROD: msTeams.json +- CDfmc-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDfmc-PROD: +- name: CD_fmc PROD +- alertingProfile: CD_fmc/alerting-profile/CDfmc-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDfmc-PROD.EMEA-Prod: +- name: CD_fmc PROD +- alertingProfile: CD_fmc/alerting-profile/CDfmc-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDfmc-PROD.NA-Prod: +- name: CD_fmc PROD +- alertingProfile: CD_fmc/alerting-profile/CDfmc-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDfmc-PROD.CN-Prod: +- name: CD_fmc PROD +- alertingProfile: CD_fmc/alerting-profile/CDfmc-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDfmc-INT: +- name: CD_fmc INT +- alertingProfile: CD_fmc/alerting-profile/CDfmc-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDfmc-INT.EMEA-PreProd: +- name: CD_fmc INT +- alertingProfile: CD_fmc/alerting-profile/CDfmc-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDfmc-INT.NA-PreProd: +- name: CD_fmc INT +- alertingProfile: CD_fmc/alerting-profile/CDfmc-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDfmc-INT.CN-PreProd: +- name: CD_fmc INT +- alertingProfile: CD_fmc/alerting-profile/CDfmc-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fmc/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_fmc/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_fmc/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fmc/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_fmc/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_fmc/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fmc/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_fmc/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..259996de --- /dev/null +++ b/BMW-Dynatrace-config/CD_fmc/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- fmc: default.json + +fmc: +- name: CD_fmc - +- mzName: CD_fmc/management-zone/CDfmc.name +- mzId: CD_fmc/management-zone/CDfmc.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fuel-search-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_fuel-search-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..d37f3056 --- /dev/null +++ b/BMW-Dynatrace-config/CD_fuel-search-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDfuel-search-service-PROD: default.json +- CDfuel-search-service-E2E: default.json +- CDfuel-search-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDfuel-search-service-PROD: +- name: CD_fuel-search-service PROD +- tag: fuel-search-service +- mzId: CD_fuel-search-service/management-zone/CDfuel-search-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDfuel-search-service-PROD.EMEA-Prod: +- name: CD_fuel-search-service PROD +- tag: fuel-search-service +- mzId: CD_fuel-search-service/management-zone/CDfuel-search-service.id +- env: PROD +- skipDeployment: "false" +CDfuel-search-service-PROD.NA-Prod: +- name: CD_fuel-search-service PROD +- tag: fuel-search-service +- mzId: CD_fuel-search-service/management-zone/CDfuel-search-service.id +- env: PROD +- skipDeployment: "false" +CDfuel-search-service-PROD.CN-Prod: +- name: CD_fuel-search-service PROD +- tag: fuel-search-service +- mzId: CD_fuel-search-service/management-zone/CDfuel-search-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDfuel-search-service-E2E: +- name: CD_fuel-search-service E2E +- tag: fuel-search-service +- mzId: CD_fuel-search-service/management-zone/CDfuel-search-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDfuel-search-service-E2E.EMEA-Prod: +- name: CD_fuel-search-service E2E +- tag: fuel-search-service +- mzId: CD_fuel-search-service/management-zone/CDfuel-search-service.id +- env: E2E +- skipDeployment: "false" +CDfuel-search-service-E2E.NA-Prod: +- name: CD_fuel-search-service E2E +- tag: fuel-search-service +- mzId: CD_fuel-search-service/management-zone/CDfuel-search-service.id +- env: E2E +- skipDeployment: "false" +CDfuel-search-service-E2E.CN-Prod: +- name: CD_fuel-search-service E2E +- tag: fuel-search-service +- mzId: CD_fuel-search-service/management-zone/CDfuel-search-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDfuel-search-service-INT: +- name: CD_fuel-search-service INT +- tag: fuel-search-service +- mzId: CD_fuel-search-service/management-zone/CDfuel-search-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDfuel-search-service-INT.EMEA-PreProd: +- name: CD_fuel-search-service INT +- tag: fuel-search-service +- mzId: CD_fuel-search-service/management-zone/CDfuel-search-service.id +- env: INT +- skipDeployment: "false" +CDfuel-search-service-INT.NA-PreProd: +- name: CD_fuel-search-service INT +- tag: fuel-search-service +- mzId: CD_fuel-search-service/management-zone/CDfuel-search-service.id +- env: INT +- skipDeployment: "false" +CDfuel-search-service-INT.CN-PreProd: +- name: CD_fuel-search-service INT +- tag: fuel-search-service +- mzId: CD_fuel-search-service/management-zone/CDfuel-search-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fuel-search-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_fuel-search-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_fuel-search-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fuel-search-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_fuel-search-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_fuel-search-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fuel-search-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_fuel-search-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_fuel-search-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fuel-search-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_fuel-search-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_fuel-search-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fuel-search-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_fuel-search-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_fuel-search-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fuel-search-service/dashboard/README.md b/BMW-Dynatrace-config/CD_fuel-search-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_fuel-search-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fuel-search-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_fuel-search-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..504ddd95 --- /dev/null +++ b/BMW-Dynatrace-config/CD_fuel-search-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDfuel-search-service-PROD-E2E: defaultPRODE2E.json +- CDfuel-search-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDfuel-search-service-PROD-E2E: +- name: CD_fuel-search-service PROD +- mzName: CD_fuel-search-service/management-zone/CDfuel-search-service.name +- mzId: CD_fuel-search-service/management-zone/CDfuel-search-service.id +- skipDeployment: "true" +#Configuration +CDfuel-search-service-PROD-E2E.EMEA-Prod: +- name: CD_fuel-search-service PROD +- mzName: CD_fuel-search-service/management-zone/CDfuel-search-service.name +- mzId: CD_fuel-search-service/management-zone/CDfuel-search-service.id +- tag: fuel-search-service +- skipDeployment: "false" +CDfuel-search-service-PROD-E2E.NA-Prod: +- name: CD_fuel-search-service PROD +- mzName: CD_fuel-search-service/management-zone/CDfuel-search-service.name +- mzId: CD_fuel-search-service/management-zone/CDfuel-search-service.id +- tag: fuel-search-service +- skipDeployment: "false" +CDfuel-search-service-PROD-E2E.CN-Prod: +- name: CD_fuel-search-service PROD +- mzName: CD_fuel-search-service/management-zone/CDfuel-search-service.name +- mzId: CD_fuel-search-service/management-zone/CDfuel-search-service.id +- tag: fuel-search-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDfuel-search-service-INT-TEST: +- name: CD_fuel-search-service INT-TEST +- mzName: CD_fuel-search-service/management-zone/CDfuel-search-service.name +- mzId: CD_fuel-search-service/management-zone/CDfuel-search-service.id +- tag: fuel-search-service +- skipDeployment: "true" +#Configuration +CDfuel-search-service-INT-TEST.EMEA-PreProd: +- name: CD_fuel-search-service INT-TEST +- mzName: CD_fuel-search-service/management-zone/CDfuel-search-service.name +- mzId: CD_fuel-search-service/management-zone/CDfuel-search-service.id +- tag: fuel-search-service +- skipDeployment: "false" +CDfuel-search-service-INT-TEST.NA-PreProd: +- name: CD_fuel-search-service INT-TEST +- mzName: CD_fuel-search-service/management-zone/CDfuel-search-service.name +- mzId: CD_fuel-search-service/management-zone/CDfuel-search-service.id +- env: INT +- skipDeployment: "false" +CDfuel-search-service-INT-TEST.CN-PreProd: +- name: CD_fuel-search-service INT-TEST +- mzName: CD_fuel-search-service/management-zone/CDfuel-search-service.name +- mzId: CD_fuel-search-service/management-zone/CDfuel-search-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fuel-search-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_fuel-search-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_fuel-search-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fuel-search-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_fuel-search-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_fuel-search-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fuel-search-service/management-zone/README.md b/BMW-Dynatrace-config/CD_fuel-search-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_fuel-search-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_fuel-search-service/management-zone/default.json b/BMW-Dynatrace-config/CD_fuel-search-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_fuel-search-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fuel-search-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_fuel-search-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..6179e591 --- /dev/null +++ b/BMW-Dynatrace-config/CD_fuel-search-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDfuel-search-service: default.json + +CDfuel-search-service: +- name: CD_fuel-search-service +- tag: fuel-search-service diff --git a/BMW-Dynatrace-config/CD_fuel-search-service/notification/README.md b/BMW-Dynatrace-config/CD_fuel-search-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_fuel-search-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fuel-search-service/notification/email.json b/BMW-Dynatrace-config/CD_fuel-search-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_fuel-search-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fuel-search-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_fuel-search-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_fuel-search-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fuel-search-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_fuel-search-service/notification/notification.yaml new file mode 100644 index 00000000..fc1e0039 --- /dev/null +++ b/BMW-Dynatrace-config/CD_fuel-search-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDfuel-search-service-PROD: msTeams.json +- CDfuel-search-service-E2E: msTeams.json +- CDfuel-search-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDfuel-search-service-PROD: +- name: CD_fuel-search-service PROD +- alertingProfile: CD_fuel-search-service/alerting-profile/CDfuel-search-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDfuel-search-service-PROD.EMEA-Prod: +- name: CD_fuel-search-service PROD +- alertingProfile: CD_fuel-search-service/alerting-profile/CDfuel-search-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDfuel-search-service-PROD.NA-Prod: +- name: CD_fuel-search-service PROD +- alertingProfile: CD_fuel-search-service/alerting-profile/CDfuel-search-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDfuel-search-service-PROD.CN-Prod: +- name: CD_fuel-search-service PROD +- alertingProfile: CD_fuel-search-service/alerting-profile/CDfuel-search-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDfuel-search-service-E2E: +- name: CD_fuel-search-service E2E +- alertingProfile: CD_fuel-search-service/alerting-profile/CDfuel-search-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDfuel-search-service-E2E.EMEA-Prod: +- name: CD_fuel-search-service E2E +- alertingProfile: CD_fuel-search-service/alerting-profile/CDfuel-search-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDfuel-search-service-E2E.NA-Prod: +- name: CD_fuel-search-service E2E +- alertingProfile: CD_fuel-search-service/alerting-profile/CDfuel-search-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDfuel-search-service-E2E.CN-Prod: +- name: CD_fuel-search-service E2E +- alertingProfile: CD_fuel-search-service/alerting-profile/CDfuel-search-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDfuel-search-service-INT: +- name: CD_fuel-search-service INT +- alertingProfile: CD_fuel-search-service/alerting-profile/CDfuel-search-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDfuel-search-service-INT.EMEA-PreProd: +- name: CD_fuel-search-service INT +- alertingProfile: CD_fuel-search-service/alerting-profile/CDfuel-search-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDfuel-search-service-INT.NA-PreProd: +- name: CD_fuel-search-service INT +- alertingProfile: CD_fuel-search-service/alerting-profile/CDfuel-search-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDfuel-search-service-INT.CN-PreProd: +- name: CD_fuel-search-service INT +- alertingProfile: CD_fuel-search-service/alerting-profile/CDfuel-search-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fuel-search-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_fuel-search-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_fuel-search-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fuel-search-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_fuel-search-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_fuel-search-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fuel-search-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_fuel-search-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..10c896c3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_fuel-search-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- fuel-search-service: default.json + +fuel-search-service: +- name: CD_fuel-search-service - +- mzName: CD_fuel-search-service/management-zone/CDfuel-search-service.name +- mzId: CD_fuel-search-service/management-zone/CDfuel-search-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hpauth/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_hpauth/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..996ce7ed --- /dev/null +++ b/BMW-Dynatrace-config/CD_hpauth/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDhpauth-PROD: default.json +- CDhpauth-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDhpauth-PROD: +- name: CD_hpauth PROD +- tag: hpauth +- mzId: CD_hpauth/management-zone/CDhpauth.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDhpauth-PROD.EMEA-Prod: +- name: CD_hpauth PROD +- tag: hpauth +- mzId: CD_hpauth/management-zone/CDhpauth.id +- env: PROD +- skipDeployment: "false" +CDhpauth-PROD.NA-Prod: +- name: CD_hpauth PROD +- tag: hpauth +- mzId: CD_hpauth/management-zone/CDhpauth.id +- env: PROD +- skipDeployment: "false" +CDhpauth-PROD.CN-Prod: +- name: CD_hpauth PROD +- tag: hpauth +- mzId: CD_hpauth/management-zone/CDhpauth.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDhpauth-INT: +- name: CD_hpauth INT +- tag: hpauth +- mzId: CD_hpauth/management-zone/CDhpauth.id +- env: INT +- skipDeployment: "true" +#Configuration +CDhpauth-INT.EMEA-PreProd: +- name: CD_hpauth INT +- tag: hpauth +- mzId: CD_hpauth/management-zone/CDhpauth.id +- env: INT +- skipDeployment: "false" +CDhpauth-INT.NA-PreProd: +- name: CD_hpauth INT +- tag: hpauth +- mzId: CD_hpauth/management-zone/CDhpauth.id +- env: INT +- skipDeployment: "false" +CDhpauth-INT.CN-PreProd: +- name: CD_hpauth INT +- tag: hpauth +- mzId: CD_hpauth/management-zone/CDhpauth.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hpauth/alerting-profile/default.json b/BMW-Dynatrace-config/CD_hpauth/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_hpauth/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hpauth/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_hpauth/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_hpauth/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hpauth/custom-service-java/README.md b/BMW-Dynatrace-config/CD_hpauth/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_hpauth/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hpauth/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_hpauth/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_hpauth/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hpauth/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_hpauth/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_hpauth/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hpauth/dashboard/README.md b/BMW-Dynatrace-config/CD_hpauth/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_hpauth/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hpauth/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_hpauth/dashboard/dashboard.yaml new file mode 100644 index 00000000..d3bfd60a --- /dev/null +++ b/BMW-Dynatrace-config/CD_hpauth/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDhpauth-PROD-E2E: defaultPRODE2E.json +- CDhpauth-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDhpauth-PROD-E2E: +- name: CD_hpauth PROD-E2E +- mzName: CD_hpauth/management-zone/CDhpauth.name +- mzId: CD_hpauth/management-zone/CDhpauth.id +- skipDeployment: "true" +#Configuration +CDhpauth-PROD-E2E.EMEA-Prod: +- name: CD_hpauth PROD-E2E +- mzName: CD_hpauth/management-zone/CDhpauth.name +- mzId: CD_hpauth/management-zone/CDhpauth.id +- tag: hpauth +- skipDeployment: "false" +CDhpauth-PROD-E2E.NA-Prod: +- name: CD_hpauth PROD-E2E +- mzName: CD_hpauth/management-zone/CDhpauth.name +- mzId: CD_hpauth/management-zone/CDhpauth.id +- tag: hpauth +- skipDeployment: "false" +CDhpauth-PROD-E2E.CN-Prod: +- name: CD_hpauth PROD-E2E +- mzName: CD_hpauth/management-zone/CDhpauth.name +- mzId: CD_hpauth/management-zone/CDhpauth.id +- tag: hpauth +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDhpauth-INT-TEST: +- name: CD_hpauth INT-TEST +- mzName: CD_hpauth/management-zone/CDhpauth.name +- mzId: CD_hpauth/management-zone/CDhpauth.id +- tag: hpauth +- skipDeployment: "true" +#Configuration +CDhpauth-INT-TEST.EMEA-PreProd: +- name: CD_hpauth INT-TEST +- mzName: CD_hpauth/management-zone/CDhpauth.name +- mzId: CD_hpauth/management-zone/CDhpauth.id +- tag: hpauth +- skipDeployment: "false" +CDhpauth-INT-TEST.NA-PreProd: +- name: CD_hpauth INT-TEST +- mzName: CD_hpauth/management-zone/CDhpauth.name +- mzId: CD_hpauth/management-zone/CDhpauth.id +- env: INT +- skipDeployment: "false" +CDhpauth-INT-TEST.CN-PreProd: +- name: CD_hpauth INT-TEST +- mzName: CD_hpauth/management-zone/CDhpauth.name +- mzId: CD_hpauth/management-zone/CDhpauth.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hpauth/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_hpauth/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_hpauth/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hpauth/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_hpauth/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_hpauth/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hpauth/management-zone/README.md b/BMW-Dynatrace-config/CD_hpauth/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_hpauth/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_hpauth/management-zone/default.json b/BMW-Dynatrace-config/CD_hpauth/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_hpauth/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hpauth/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_hpauth/management-zone/management-zone.yaml new file mode 100644 index 00000000..eaf92875 --- /dev/null +++ b/BMW-Dynatrace-config/CD_hpauth/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDhpauth: default.json + +CDhpauth: +- name: CD_hpauth +- tag: hpauth diff --git a/BMW-Dynatrace-config/CD_hpauth/notification/README.md b/BMW-Dynatrace-config/CD_hpauth/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_hpauth/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hpauth/notification/email.json b/BMW-Dynatrace-config/CD_hpauth/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_hpauth/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hpauth/notification/msTeams.json b/BMW-Dynatrace-config/CD_hpauth/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_hpauth/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hpauth/notification/notification.yaml b/BMW-Dynatrace-config/CD_hpauth/notification/notification.yaml new file mode 100644 index 00000000..84d9f1d3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_hpauth/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDhpauth-PROD: msTeams.json +- CDhpauth-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDhpauth-PROD: +- name: CD_hpauth PROD +- alertingProfile: CD_hpauth/alerting-profile/CDhpauth-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDhpauth-PROD.EMEA-Prod: +- name: CD_hpauth PROD +- alertingProfile: CD_hpauth/alerting-profile/CDhpauth-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDhpauth-PROD.NA-Prod: +- name: CD_hpauth PROD +- alertingProfile: CD_hpauth/alerting-profile/CDhpauth-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDhpauth-PROD.CN-Prod: +- name: CD_hpauth PROD +- alertingProfile: CD_hpauth/alerting-profile/CDhpauth-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDhpauth-INT: +- name: CD_hpauth INT +- alertingProfile: CD_hpauth/alerting-profile/CDhpauth-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDhpauth-INT.EMEA-PreProd: +- name: CD_hpauth INT +- alertingProfile: CD_hpauth/alerting-profile/CDhpauth-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDhpauth-INT.NA-PreProd: +- name: CD_hpauth INT +- alertingProfile: CD_hpauth/alerting-profile/CDhpauth-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDhpauth-INT.CN-PreProd: +- name: CD_hpauth INT +- alertingProfile: CD_hpauth/alerting-profile/CDhpauth-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hpauth/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_hpauth/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_hpauth/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hpauth/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_hpauth/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_hpauth/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hpauth/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_hpauth/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..e9463806 --- /dev/null +++ b/BMW-Dynatrace-config/CD_hpauth/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- hpauth: default.json + +hpauth: +- name: CD_hpauth - +- mzName: CD_hpauth/management-zone/CDhpauth.name +- mzId: CD_hpauth/management-zone/CDhpauth.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hubtab-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_hubtab-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..2c916b05 --- /dev/null +++ b/BMW-Dynatrace-config/CD_hubtab-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDhubtab-service-PROD: default.json +- CDhubtab-service-E2E: default.json +- CDhubtab-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDhubtab-service-PROD: +- name: CD_hubtab-service PROD +- tag: hubtab-service +- mzId: CD_hubtab-service/management-zone/CDhubtab-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDhubtab-service-PROD.EMEA-Prod: +- name: CD_hubtab-service PROD +- tag: hubtab-service +- mzId: CD_hubtab-service/management-zone/CDhubtab-service.id +- env: PROD +- skipDeployment: "false" +CDhubtab-service-PROD.NA-Prod: +- name: CD_hubtab-service PROD +- tag: hubtab-service +- mzId: CD_hubtab-service/management-zone/CDhubtab-service.id +- env: PROD +- skipDeployment: "false" +CDhubtab-service-PROD.CN-Prod: +- name: CD_hubtab-service PROD +- tag: hubtab-service +- mzId: CD_hubtab-service/management-zone/CDhubtab-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDhubtab-service-E2E: +- name: CD_hubtab-service E2E +- tag: hubtab-service +- mzId: CD_hubtab-service/management-zone/CDhubtab-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDhubtab-service-E2E.EMEA-Prod: +- name: CD_hubtab-service E2E +- tag: hubtab-service +- mzId: CD_hubtab-service/management-zone/CDhubtab-service.id +- env: E2E +- skipDeployment: "false" +CDhubtab-service-E2E.NA-Prod: +- name: CD_hubtab-service E2E +- tag: hubtab-service +- mzId: CD_hubtab-service/management-zone/CDhubtab-service.id +- env: E2E +- skipDeployment: "false" +CDhubtab-service-E2E.CN-Prod: +- name: CD_hubtab-service E2E +- tag: hubtab-service +- mzId: CD_hubtab-service/management-zone/CDhubtab-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDhubtab-service-INT: +- name: CD_hubtab-service INT +- tag: hubtab-service +- mzId: CD_hubtab-service/management-zone/CDhubtab-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDhubtab-service-INT.EMEA-PreProd: +- name: CD_hubtab-service INT +- tag: hubtab-service +- mzId: CD_hubtab-service/management-zone/CDhubtab-service.id +- env: INT +- skipDeployment: "false" +CDhubtab-service-INT.NA-PreProd: +- name: CD_hubtab-service INT +- tag: hubtab-service +- mzId: CD_hubtab-service/management-zone/CDhubtab-service.id +- env: INT +- skipDeployment: "false" +CDhubtab-service-INT.CN-PreProd: +- name: CD_hubtab-service INT +- tag: hubtab-service +- mzId: CD_hubtab-service/management-zone/CDhubtab-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hubtab-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_hubtab-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_hubtab-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hubtab-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_hubtab-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_hubtab-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hubtab-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_hubtab-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_hubtab-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hubtab-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_hubtab-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_hubtab-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hubtab-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_hubtab-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_hubtab-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hubtab-service/dashboard/README.md b/BMW-Dynatrace-config/CD_hubtab-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_hubtab-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hubtab-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_hubtab-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..a4cf522f --- /dev/null +++ b/BMW-Dynatrace-config/CD_hubtab-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDhubtab-service-PROD-E2E: defaultPRODE2E.json +- CDhubtab-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDhubtab-service-PROD-E2E: +- name: CD_hubtab-service PROD +- mzName: CD_hubtab-service/management-zone/CDhubtab-service.name +- mzId: CD_hubtab-service/management-zone/CDhubtab-service.id +- skipDeployment: "true" +#Configuration +CDhubtab-service-PROD-E2E.EMEA-Prod: +- name: CD_hubtab-service PROD +- mzName: CD_hubtab-service/management-zone/CDhubtab-service.name +- mzId: CD_hubtab-service/management-zone/CDhubtab-service.id +- tag: hubtab-service +- skipDeployment: "false" +CDhubtab-service-PROD-E2E.NA-Prod: +- name: CD_hubtab-service PROD +- mzName: CD_hubtab-service/management-zone/CDhubtab-service.name +- mzId: CD_hubtab-service/management-zone/CDhubtab-service.id +- tag: hubtab-service +- skipDeployment: "false" +CDhubtab-service-PROD-E2E.CN-Prod: +- name: CD_hubtab-service PROD +- mzName: CD_hubtab-service/management-zone/CDhubtab-service.name +- mzId: CD_hubtab-service/management-zone/CDhubtab-service.id +- tag: hubtab-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDhubtab-service-INT-TEST: +- name: CD_hubtab-service INT-TEST +- mzName: CD_hubtab-service/management-zone/CDhubtab-service.name +- mzId: CD_hubtab-service/management-zone/CDhubtab-service.id +- tag: hubtab-service +- skipDeployment: "true" +#Configuration +CDhubtab-service-INT-TEST.EMEA-PreProd: +- name: CD_hubtab-service INT-TEST +- mzName: CD_hubtab-service/management-zone/CDhubtab-service.name +- mzId: CD_hubtab-service/management-zone/CDhubtab-service.id +- tag: hubtab-service +- skipDeployment: "false" +CDhubtab-service-INT-TEST.NA-PreProd: +- name: CD_hubtab-service INT-TEST +- mzName: CD_hubtab-service/management-zone/CDhubtab-service.name +- mzId: CD_hubtab-service/management-zone/CDhubtab-service.id +- env: INT +- skipDeployment: "false" +CDhubtab-service-INT-TEST.CN-PreProd: +- name: CD_hubtab-service INT-TEST +- mzName: CD_hubtab-service/management-zone/CDhubtab-service.name +- mzId: CD_hubtab-service/management-zone/CDhubtab-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hubtab-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_hubtab-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_hubtab-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hubtab-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_hubtab-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_hubtab-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hubtab-service/management-zone/README.md b/BMW-Dynatrace-config/CD_hubtab-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_hubtab-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_hubtab-service/management-zone/default.json b/BMW-Dynatrace-config/CD_hubtab-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_hubtab-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hubtab-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_hubtab-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..170dfeb7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_hubtab-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDhubtab-service: default.json + +CDhubtab-service: +- name: CD_hubtab-service +- tag: hubtab-service diff --git a/BMW-Dynatrace-config/CD_hubtab-service/notification/README.md b/BMW-Dynatrace-config/CD_hubtab-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_hubtab-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hubtab-service/notification/email.json b/BMW-Dynatrace-config/CD_hubtab-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_hubtab-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hubtab-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_hubtab-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_hubtab-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hubtab-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_hubtab-service/notification/notification.yaml new file mode 100644 index 00000000..ddb829b9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_hubtab-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDhubtab-service-PROD: msTeams.json +- CDhubtab-service-E2E: msTeams.json +- CDhubtab-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDhubtab-service-PROD: +- name: CD_hubtab-service PROD +- alertingProfile: CD_hubtab-service/alerting-profile/CDhubtab-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDhubtab-service-PROD.EMEA-Prod: +- name: CD_hubtab-service PROD +- alertingProfile: CD_hubtab-service/alerting-profile/CDhubtab-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDhubtab-service-PROD.NA-Prod: +- name: CD_hubtab-service PROD +- alertingProfile: CD_hubtab-service/alerting-profile/CDhubtab-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDhubtab-service-PROD.CN-Prod: +- name: CD_hubtab-service PROD +- alertingProfile: CD_hubtab-service/alerting-profile/CDhubtab-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDhubtab-service-E2E: +- name: CD_hubtab-service E2E +- alertingProfile: CD_hubtab-service/alerting-profile/CDhubtab-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDhubtab-service-E2E.EMEA-Prod: +- name: CD_hubtab-service E2E +- alertingProfile: CD_hubtab-service/alerting-profile/CDhubtab-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDhubtab-service-E2E.NA-Prod: +- name: CD_hubtab-service E2E +- alertingProfile: CD_hubtab-service/alerting-profile/CDhubtab-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDhubtab-service-E2E.CN-Prod: +- name: CD_hubtab-service E2E +- alertingProfile: CD_hubtab-service/alerting-profile/CDhubtab-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDhubtab-service-INT: +- name: CD_hubtab-service INT +- alertingProfile: CD_hubtab-service/alerting-profile/CDhubtab-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDhubtab-service-INT.EMEA-PreProd: +- name: CD_hubtab-service INT +- alertingProfile: CD_hubtab-service/alerting-profile/CDhubtab-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDhubtab-service-INT.NA-PreProd: +- name: CD_hubtab-service INT +- alertingProfile: CD_hubtab-service/alerting-profile/CDhubtab-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDhubtab-service-INT.CN-PreProd: +- name: CD_hubtab-service INT +- alertingProfile: CD_hubtab-service/alerting-profile/CDhubtab-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hubtab-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_hubtab-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_hubtab-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hubtab-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_hubtab-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_hubtab-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hubtab-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_hubtab-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..e45c2728 --- /dev/null +++ b/BMW-Dynatrace-config/CD_hubtab-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- hubtab-service: default.json + +hubtab-service: +- name: CD_hubtab-service - +- mzName: CD_hubtab-service/management-zone/CDhubtab-service.name +- mzId: CD_hubtab-service/management-zone/CDhubtab-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_id-lookup-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_id-lookup-service/alerting-profile/alerting-profile.yaml index fca50ca3..f4cb6941 100644 --- a/BMW-Dynatrace-config/CD_id-lookup-service/alerting-profile/alerting-profile.yaml +++ b/BMW-Dynatrace-config/CD_id-lookup-service/alerting-profile/alerting-profile.yaml @@ -1,6 +1,88 @@ -CDid-lookup-service: -- name: CD_id-lookup-service/management-zone/CDid-lookup-service.name +config: +- CDid-lookup-service-PROD: default.json +- CDid-lookup-service-E2E: default.json +- CDid-lookup-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDid-lookup-service-PROD: +- name: CD_id-lookup-service PROD - tag: id-lookup-service - mzId: CD_id-lookup-service/management-zone/CDid-lookup-service.id -config: -- CDid-lookup-service: id-lookup-service.json +- env: PROD +- skipDeployment: "true" +#Configuration +CDid-lookup-service-PROD.EMEA-Prod: +- name: CD_id-lookup-service PROD +- tag: id-lookup-service +- mzId: CD_id-lookup-service/management-zone/CDid-lookup-service.id +- env: PROD +- skipDeployment: "false" +CDid-lookup-service-PROD.NA-Prod: +- name: CD_id-lookup-service PROD +- tag: id-lookup-service +- mzId: CD_id-lookup-service/management-zone/CDid-lookup-service.id +- env: PROD +- skipDeployment: "false" +CDid-lookup-service-PROD.CN-Prod: +- name: CD_id-lookup-service PROD +- tag: id-lookup-service +- mzId: CD_id-lookup-service/management-zone/CDid-lookup-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDid-lookup-service-E2E: +- name: CD_id-lookup-service E2E +- tag: id-lookup-service +- mzId: CD_id-lookup-service/management-zone/CDid-lookup-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDid-lookup-service-E2E.EMEA-Prod: +- name: CD_id-lookup-service E2E +- tag: id-lookup-service +- mzId: CD_id-lookup-service/management-zone/CDid-lookup-service.id +- env: E2E +- skipDeployment: "false" +CDid-lookup-service-E2E.NA-Prod: +- name: CD_id-lookup-service E2E +- tag: id-lookup-service +- mzId: CD_id-lookup-service/management-zone/CDid-lookup-service.id +- env: E2E +- skipDeployment: "false" +CDid-lookup-service-E2E.CN-Prod: +- name: CD_id-lookup-service E2E +- tag: id-lookup-service +- mzId: CD_id-lookup-service/management-zone/CDid-lookup-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDid-lookup-service-INT: +- name: CD_id-lookup-service INT +- tag: id-lookup-service +- mzId: CD_id-lookup-service/management-zone/CDid-lookup-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDid-lookup-service-INT.EMEA-PreProd: +- name: CD_id-lookup-service INT +- tag: id-lookup-service +- mzId: CD_id-lookup-service/management-zone/CDid-lookup-service.id +- env: INT +- skipDeployment: "false" +CDid-lookup-service-INT.NA-PreProd: +- name: CD_id-lookup-service INT +- tag: id-lookup-service +- mzId: CD_id-lookup-service/management-zone/CDid-lookup-service.id +- env: INT +- skipDeployment: "false" +CDid-lookup-service-INT.CN-PreProd: +- name: CD_id-lookup-service INT +- tag: id-lookup-service +- mzId: CD_id-lookup-service/management-zone/CDid-lookup-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_id-lookup-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_id-lookup-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_id-lookup-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_id-lookup-service/alerting-profile/id-lookup-service.json b/BMW-Dynatrace-config/CD_id-lookup-service/alerting-profile/id-lookup-service.json deleted file mode 100644 index d10ad44a..00000000 --- a/BMW-Dynatrace-config/CD_id-lookup-service/alerting-profile/id-lookup-service.json +++ /dev/null @@ -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}}" - } - ] - } - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_id-lookup-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_id-lookup-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_id-lookup-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_id-lookup-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_id-lookup-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_id-lookup-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_id-lookup-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_id-lookup-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_id-lookup-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_id-lookup-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_id-lookup-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_id-lookup-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_id-lookup-service/dashboard/README.md b/BMW-Dynatrace-config/CD_id-lookup-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_id-lookup-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_id-lookup-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_id-lookup-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..c1f88d68 --- /dev/null +++ b/BMW-Dynatrace-config/CD_id-lookup-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDid-lookup-service-PROD-E2E: defaultPRODE2E.json +- CDid-lookup-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDid-lookup-service-PROD-E2E: +- name: CD_id-lookup-service PROD +- mzName: CD_id-lookup-service/management-zone/CDid-lookup-service.name +- mzId: CD_id-lookup-service/management-zone/CDid-lookup-service.id +- skipDeployment: "true" +#Configuration +CDid-lookup-service-PROD-E2E.EMEA-Prod: +- name: CD_id-lookup-service PROD +- mzName: CD_id-lookup-service/management-zone/CDid-lookup-service.name +- mzId: CD_id-lookup-service/management-zone/CDid-lookup-service.id +- tag: id-lookup-service +- skipDeployment: "false" +CDid-lookup-service-PROD-E2E.NA-Prod: +- name: CD_id-lookup-service PROD +- mzName: CD_id-lookup-service/management-zone/CDid-lookup-service.name +- mzId: CD_id-lookup-service/management-zone/CDid-lookup-service.id +- tag: id-lookup-service +- skipDeployment: "false" +CDid-lookup-service-PROD-E2E.CN-Prod: +- name: CD_id-lookup-service PROD +- mzName: CD_id-lookup-service/management-zone/CDid-lookup-service.name +- mzId: CD_id-lookup-service/management-zone/CDid-lookup-service.id +- tag: id-lookup-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDid-lookup-service-INT-TEST: +- name: CD_id-lookup-service INT-TEST +- mzName: CD_id-lookup-service/management-zone/CDid-lookup-service.name +- mzId: CD_id-lookup-service/management-zone/CDid-lookup-service.id +- tag: id-lookup-service +- skipDeployment: "true" +#Configuration +CDid-lookup-service-INT-TEST.EMEA-PreProd: +- name: CD_id-lookup-service INT-TEST +- mzName: CD_id-lookup-service/management-zone/CDid-lookup-service.name +- mzId: CD_id-lookup-service/management-zone/CDid-lookup-service.id +- tag: id-lookup-service +- skipDeployment: "false" +CDid-lookup-service-INT-TEST.NA-PreProd: +- name: CD_id-lookup-service INT-TEST +- mzName: CD_id-lookup-service/management-zone/CDid-lookup-service.name +- mzId: CD_id-lookup-service/management-zone/CDid-lookup-service.id +- env: INT +- skipDeployment: "false" +CDid-lookup-service-INT-TEST.CN-PreProd: +- name: CD_id-lookup-service INT-TEST +- mzName: CD_id-lookup-service/management-zone/CDid-lookup-service.name +- mzId: CD_id-lookup-service/management-zone/CDid-lookup-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_id-lookup-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_id-lookup-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_id-lookup-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_id-lookup-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_id-lookup-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_id-lookup-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_id-lookup-service/management-zone/CDid-lookup-service.json b/BMW-Dynatrace-config/CD_id-lookup-service/management-zone/CDid-lookup-service.json deleted file mode 100644 index b2a9367b..00000000 --- a/BMW-Dynatrace-config/CD_id-lookup-service/management-zone/CDid-lookup-service.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "dimensionalRules": [], - "name": "{{.name}}", - "rules": [ - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "{{.tag}}" - } - }, - "key": { - "attribute": "SERVICE_TAGS" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "HealthResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PingResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PrometheusResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - } - ], - "enabled": true, - "propagationTypes": [ - "SERVICE_TO_PROCESS_GROUP_LIKE", - "SERVICE_TO_HOST_LIKE" - ], - "type": "SERVICE" - }, - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "{{.tag}}" - } - }, - "key": { - "attribute": "PROCESS_GROUP_TAGS" - } - } - ], - "enabled": true, - "propagationTypes": [ - "PROCESS_GROUP_TO_HOST" - ], - "type": "PROCESS_GROUP" - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_id-lookup-service/management-zone/README.md b/BMW-Dynatrace-config/CD_id-lookup-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_id-lookup-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_id-lookup-service/management-zone/default.json b/BMW-Dynatrace-config/CD_id-lookup-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_id-lookup-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_id-lookup-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_id-lookup-service/management-zone/management-zone.yaml index 9efcbe2b..a77f51af 100644 --- a/BMW-Dynatrace-config/CD_id-lookup-service/management-zone/management-zone.yaml +++ b/BMW-Dynatrace-config/CD_id-lookup-service/management-zone/management-zone.yaml @@ -1,20 +1,6 @@ -CDid-lookup-service.CN-PreProd: -- name: CD_id-lookup-service -- tag: id-lookup-service -CDid-lookup-service.CN-Prod: -- name: CD_id-lookup-service -- tag: id-lookup-service -CDid-lookup-service.EMEA-PreProd: -- name: CD_id-lookup-service -- tag: id-lookup-service -CDid-lookup-service.EMEA-Prod: -- name: CD_id-lookup-service -- tag: id-lookup-service -CDid-lookup-service.NA-PreProd: -- name: CD_id-lookup-service -- tag: id-lookup-service -CDid-lookup-service.NA-Prod: -- name: CD_id-lookup-service -- tag: id-lookup-service config: -- CDid-lookup-service: CDid-lookup-service.json +- CDid-lookup-service: default.json + +CDid-lookup-service: +- name: CD_id-lookup-service +- tag: id-lookup-service diff --git a/BMW-Dynatrace-config/CD_id-lookup-service/notification/README.md b/BMW-Dynatrace-config/CD_id-lookup-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_id-lookup-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_id-lookup-service/notification/email.json b/BMW-Dynatrace-config/CD_id-lookup-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_id-lookup-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_id-lookup-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_id-lookup-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_id-lookup-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_id-lookup-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_id-lookup-service/notification/notification.yaml new file mode 100644 index 00000000..f9c784a1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_id-lookup-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDid-lookup-service-PROD: msTeams.json +- CDid-lookup-service-E2E: msTeams.json +- CDid-lookup-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDid-lookup-service-PROD: +- name: CD_id-lookup-service PROD +- alertingProfile: CD_id-lookup-service/alerting-profile/CDid-lookup-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDid-lookup-service-PROD.EMEA-Prod: +- name: CD_id-lookup-service PROD +- alertingProfile: CD_id-lookup-service/alerting-profile/CDid-lookup-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDid-lookup-service-PROD.NA-Prod: +- name: CD_id-lookup-service PROD +- alertingProfile: CD_id-lookup-service/alerting-profile/CDid-lookup-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDid-lookup-service-PROD.CN-Prod: +- name: CD_id-lookup-service PROD +- alertingProfile: CD_id-lookup-service/alerting-profile/CDid-lookup-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDid-lookup-service-E2E: +- name: CD_id-lookup-service E2E +- alertingProfile: CD_id-lookup-service/alerting-profile/CDid-lookup-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDid-lookup-service-E2E.EMEA-Prod: +- name: CD_id-lookup-service E2E +- alertingProfile: CD_id-lookup-service/alerting-profile/CDid-lookup-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDid-lookup-service-E2E.NA-Prod: +- name: CD_id-lookup-service E2E +- alertingProfile: CD_id-lookup-service/alerting-profile/CDid-lookup-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDid-lookup-service-E2E.CN-Prod: +- name: CD_id-lookup-service E2E +- alertingProfile: CD_id-lookup-service/alerting-profile/CDid-lookup-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDid-lookup-service-INT: +- name: CD_id-lookup-service INT +- alertingProfile: CD_id-lookup-service/alerting-profile/CDid-lookup-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDid-lookup-service-INT.EMEA-PreProd: +- name: CD_id-lookup-service INT +- alertingProfile: CD_id-lookup-service/alerting-profile/CDid-lookup-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDid-lookup-service-INT.NA-PreProd: +- name: CD_id-lookup-service INT +- alertingProfile: CD_id-lookup-service/alerting-profile/CDid-lookup-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDid-lookup-service-INT.CN-PreProd: +- name: CD_id-lookup-service INT +- alertingProfile: CD_id-lookup-service/alerting-profile/CDid-lookup-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_id-lookup-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_id-lookup-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_id-lookup-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_id-lookup-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_id-lookup-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_id-lookup-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_id-lookup-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_id-lookup-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..a5d107fc --- /dev/null +++ b/BMW-Dynatrace-config/CD_id-lookup-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- id-lookup-service: default.json + +id-lookup-service: +- name: CD_id-lookup-service - +- mzName: CD_id-lookup-service/management-zone/CDid-lookup-service.name +- mzId: CD_id-lookup-service/management-zone/CDid-lookup-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-admin/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_ids-admin/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..3c1c58c1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-admin/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDids-admin-PROD: default.json +- CDids-admin-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDids-admin-PROD: +- name: CD_ids-admin PROD +- tag: ids-admin +- mzId: CD_ids-admin/management-zone/CDids-admin.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDids-admin-PROD.EMEA-Prod: +- name: CD_ids-admin PROD +- tag: ids-admin +- mzId: CD_ids-admin/management-zone/CDids-admin.id +- env: PROD +- skipDeployment: "false" +CDids-admin-PROD.NA-Prod: +- name: CD_ids-admin PROD +- tag: ids-admin +- mzId: CD_ids-admin/management-zone/CDids-admin.id +- env: PROD +- skipDeployment: "false" +CDids-admin-PROD.CN-Prod: +- name: CD_ids-admin PROD +- tag: ids-admin +- mzId: CD_ids-admin/management-zone/CDids-admin.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDids-admin-INT: +- name: CD_ids-admin INT +- tag: ids-admin +- mzId: CD_ids-admin/management-zone/CDids-admin.id +- env: INT +- skipDeployment: "true" +#Configuration +CDids-admin-INT.EMEA-PreProd: +- name: CD_ids-admin INT +- tag: ids-admin +- mzId: CD_ids-admin/management-zone/CDids-admin.id +- env: INT +- skipDeployment: "false" +CDids-admin-INT.NA-PreProd: +- name: CD_ids-admin INT +- tag: ids-admin +- mzId: CD_ids-admin/management-zone/CDids-admin.id +- env: INT +- skipDeployment: "false" +CDids-admin-INT.CN-PreProd: +- name: CD_ids-admin INT +- tag: ids-admin +- mzId: CD_ids-admin/management-zone/CDids-admin.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-admin/alerting-profile/default.json b/BMW-Dynatrace-config/CD_ids-admin/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-admin/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-admin/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_ids-admin/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-admin/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-admin/custom-service-java/README.md b/BMW-Dynatrace-config/CD_ids-admin/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-admin/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-admin/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_ids-admin/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-admin/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-admin/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_ids-admin/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-admin/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-admin/dashboard/README.md b/BMW-Dynatrace-config/CD_ids-admin/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-admin/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-admin/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_ids-admin/dashboard/dashboard.yaml new file mode 100644 index 00000000..9c175961 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-admin/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDids-admin-PROD-E2E: defaultPRODE2E.json +- CDids-admin-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDids-admin-PROD-E2E: +- name: CD_ids-admin PROD-E2E +- mzName: CD_ids-admin/management-zone/CDids-admin.name +- mzId: CD_ids-admin/management-zone/CDids-admin.id +- skipDeployment: "true" +#Configuration +CDids-admin-PROD-E2E.EMEA-Prod: +- name: CD_ids-admin PROD-E2E +- mzName: CD_ids-admin/management-zone/CDids-admin.name +- mzId: CD_ids-admin/management-zone/CDids-admin.id +- tag: ids-admin +- skipDeployment: "false" +CDids-admin-PROD-E2E.NA-Prod: +- name: CD_ids-admin PROD-E2E +- mzName: CD_ids-admin/management-zone/CDids-admin.name +- mzId: CD_ids-admin/management-zone/CDids-admin.id +- tag: ids-admin +- skipDeployment: "false" +CDids-admin-PROD-E2E.CN-Prod: +- name: CD_ids-admin PROD-E2E +- mzName: CD_ids-admin/management-zone/CDids-admin.name +- mzId: CD_ids-admin/management-zone/CDids-admin.id +- tag: ids-admin +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDids-admin-INT-TEST: +- name: CD_ids-admin INT-TEST +- mzName: CD_ids-admin/management-zone/CDids-admin.name +- mzId: CD_ids-admin/management-zone/CDids-admin.id +- tag: ids-admin +- skipDeployment: "true" +#Configuration +CDids-admin-INT-TEST.EMEA-PreProd: +- name: CD_ids-admin INT-TEST +- mzName: CD_ids-admin/management-zone/CDids-admin.name +- mzId: CD_ids-admin/management-zone/CDids-admin.id +- tag: ids-admin +- skipDeployment: "false" +CDids-admin-INT-TEST.NA-PreProd: +- name: CD_ids-admin INT-TEST +- mzName: CD_ids-admin/management-zone/CDids-admin.name +- mzId: CD_ids-admin/management-zone/CDids-admin.id +- env: INT +- skipDeployment: "false" +CDids-admin-INT-TEST.CN-PreProd: +- name: CD_ids-admin INT-TEST +- mzName: CD_ids-admin/management-zone/CDids-admin.name +- mzId: CD_ids-admin/management-zone/CDids-admin.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-admin/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_ids-admin/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-admin/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-admin/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_ids-admin/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-admin/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-admin/management-zone/README.md b/BMW-Dynatrace-config/CD_ids-admin/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-admin/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_ids-admin/management-zone/default.json b/BMW-Dynatrace-config/CD_ids-admin/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-admin/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-admin/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_ids-admin/management-zone/management-zone.yaml new file mode 100644 index 00000000..fcfa2d18 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-admin/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDids-admin: default.json + +CDids-admin: +- name: CD_ids-admin +- tag: ids-admin diff --git a/BMW-Dynatrace-config/CD_ids-admin/notification/README.md b/BMW-Dynatrace-config/CD_ids-admin/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-admin/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-admin/notification/email.json b/BMW-Dynatrace-config/CD_ids-admin/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-admin/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-admin/notification/msTeams.json b/BMW-Dynatrace-config/CD_ids-admin/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-admin/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-admin/notification/notification.yaml b/BMW-Dynatrace-config/CD_ids-admin/notification/notification.yaml new file mode 100644 index 00000000..c916a600 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-admin/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDids-admin-PROD: msTeams.json +- CDids-admin-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDids-admin-PROD: +- name: CD_ids-admin PROD +- alertingProfile: CD_ids-admin/alerting-profile/CDids-admin-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDids-admin-PROD.EMEA-Prod: +- name: CD_ids-admin PROD +- alertingProfile: CD_ids-admin/alerting-profile/CDids-admin-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDids-admin-PROD.NA-Prod: +- name: CD_ids-admin PROD +- alertingProfile: CD_ids-admin/alerting-profile/CDids-admin-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDids-admin-PROD.CN-Prod: +- name: CD_ids-admin PROD +- alertingProfile: CD_ids-admin/alerting-profile/CDids-admin-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDids-admin-INT: +- name: CD_ids-admin INT +- alertingProfile: CD_ids-admin/alerting-profile/CDids-admin-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDids-admin-INT.EMEA-PreProd: +- name: CD_ids-admin INT +- alertingProfile: CD_ids-admin/alerting-profile/CDids-admin-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDids-admin-INT.NA-PreProd: +- name: CD_ids-admin INT +- alertingProfile: CD_ids-admin/alerting-profile/CDids-admin-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDids-admin-INT.CN-PreProd: +- name: CD_ids-admin INT +- alertingProfile: CD_ids-admin/alerting-profile/CDids-admin-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-admin/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_ids-admin/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-admin/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-admin/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_ids-admin/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-admin/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-admin/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_ids-admin/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..1dcbdf27 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-admin/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- ids-admin: default.json + +ids-admin: +- name: CD_ids-admin - +- mzName: CD_ids-admin/management-zone/CDids-admin.name +- mzId: CD_ids-admin/management-zone/CDids-admin.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-svds/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_ids-svds/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..086e5ae6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-svds/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDids-svds-PROD: default.json +- CDids-svds-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDids-svds-PROD: +- name: CD_ids-svds PROD +- tag: ids-svds +- mzId: CD_ids-svds/management-zone/CDids-svds.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDids-svds-PROD.EMEA-Prod: +- name: CD_ids-svds PROD +- tag: ids-svds +- mzId: CD_ids-svds/management-zone/CDids-svds.id +- env: PROD +- skipDeployment: "false" +CDids-svds-PROD.NA-Prod: +- name: CD_ids-svds PROD +- tag: ids-svds +- mzId: CD_ids-svds/management-zone/CDids-svds.id +- env: PROD +- skipDeployment: "false" +CDids-svds-PROD.CN-Prod: +- name: CD_ids-svds PROD +- tag: ids-svds +- mzId: CD_ids-svds/management-zone/CDids-svds.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDids-svds-INT: +- name: CD_ids-svds INT +- tag: ids-svds +- mzId: CD_ids-svds/management-zone/CDids-svds.id +- env: INT +- skipDeployment: "true" +#Configuration +CDids-svds-INT.EMEA-PreProd: +- name: CD_ids-svds INT +- tag: ids-svds +- mzId: CD_ids-svds/management-zone/CDids-svds.id +- env: INT +- skipDeployment: "false" +CDids-svds-INT.NA-PreProd: +- name: CD_ids-svds INT +- tag: ids-svds +- mzId: CD_ids-svds/management-zone/CDids-svds.id +- env: INT +- skipDeployment: "false" +CDids-svds-INT.CN-PreProd: +- name: CD_ids-svds INT +- tag: ids-svds +- mzId: CD_ids-svds/management-zone/CDids-svds.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-svds/alerting-profile/default.json b/BMW-Dynatrace-config/CD_ids-svds/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-svds/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-svds/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_ids-svds/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-svds/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-svds/custom-service-java/README.md b/BMW-Dynatrace-config/CD_ids-svds/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-svds/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-svds/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_ids-svds/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-svds/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-svds/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_ids-svds/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-svds/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-svds/dashboard/README.md b/BMW-Dynatrace-config/CD_ids-svds/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-svds/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-svds/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_ids-svds/dashboard/dashboard.yaml new file mode 100644 index 00000000..22732042 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-svds/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDids-svds-PROD-E2E: defaultPRODE2E.json +- CDids-svds-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDids-svds-PROD-E2E: +- name: CD_ids-svds PROD-E2E +- mzName: CD_ids-svds/management-zone/CDids-svds.name +- mzId: CD_ids-svds/management-zone/CDids-svds.id +- skipDeployment: "true" +#Configuration +CDids-svds-PROD-E2E.EMEA-Prod: +- name: CD_ids-svds PROD-E2E +- mzName: CD_ids-svds/management-zone/CDids-svds.name +- mzId: CD_ids-svds/management-zone/CDids-svds.id +- tag: ids-svds +- skipDeployment: "false" +CDids-svds-PROD-E2E.NA-Prod: +- name: CD_ids-svds PROD-E2E +- mzName: CD_ids-svds/management-zone/CDids-svds.name +- mzId: CD_ids-svds/management-zone/CDids-svds.id +- tag: ids-svds +- skipDeployment: "false" +CDids-svds-PROD-E2E.CN-Prod: +- name: CD_ids-svds PROD-E2E +- mzName: CD_ids-svds/management-zone/CDids-svds.name +- mzId: CD_ids-svds/management-zone/CDids-svds.id +- tag: ids-svds +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDids-svds-INT-TEST: +- name: CD_ids-svds INT-TEST +- mzName: CD_ids-svds/management-zone/CDids-svds.name +- mzId: CD_ids-svds/management-zone/CDids-svds.id +- tag: ids-svds +- skipDeployment: "true" +#Configuration +CDids-svds-INT-TEST.EMEA-PreProd: +- name: CD_ids-svds INT-TEST +- mzName: CD_ids-svds/management-zone/CDids-svds.name +- mzId: CD_ids-svds/management-zone/CDids-svds.id +- tag: ids-svds +- skipDeployment: "false" +CDids-svds-INT-TEST.NA-PreProd: +- name: CD_ids-svds INT-TEST +- mzName: CD_ids-svds/management-zone/CDids-svds.name +- mzId: CD_ids-svds/management-zone/CDids-svds.id +- env: INT +- skipDeployment: "false" +CDids-svds-INT-TEST.CN-PreProd: +- name: CD_ids-svds INT-TEST +- mzName: CD_ids-svds/management-zone/CDids-svds.name +- mzId: CD_ids-svds/management-zone/CDids-svds.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-svds/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_ids-svds/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-svds/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-svds/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_ids-svds/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-svds/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-svds/management-zone/README.md b/BMW-Dynatrace-config/CD_ids-svds/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-svds/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_ids-svds/management-zone/default.json b/BMW-Dynatrace-config/CD_ids-svds/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-svds/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-svds/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_ids-svds/management-zone/management-zone.yaml new file mode 100644 index 00000000..f7582ea6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-svds/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDids-svds: default.json + +CDids-svds: +- name: CD_ids-svds +- tag: ids-svds diff --git a/BMW-Dynatrace-config/CD_ids-svds/notification/README.md b/BMW-Dynatrace-config/CD_ids-svds/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-svds/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-svds/notification/email.json b/BMW-Dynatrace-config/CD_ids-svds/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-svds/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-svds/notification/msTeams.json b/BMW-Dynatrace-config/CD_ids-svds/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-svds/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-svds/notification/notification.yaml b/BMW-Dynatrace-config/CD_ids-svds/notification/notification.yaml new file mode 100644 index 00000000..82696169 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-svds/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDids-svds-PROD: msTeams.json +- CDids-svds-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDids-svds-PROD: +- name: CD_ids-svds PROD +- alertingProfile: CD_ids-svds/alerting-profile/CDids-svds-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDids-svds-PROD.EMEA-Prod: +- name: CD_ids-svds PROD +- alertingProfile: CD_ids-svds/alerting-profile/CDids-svds-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDids-svds-PROD.NA-Prod: +- name: CD_ids-svds PROD +- alertingProfile: CD_ids-svds/alerting-profile/CDids-svds-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDids-svds-PROD.CN-Prod: +- name: CD_ids-svds PROD +- alertingProfile: CD_ids-svds/alerting-profile/CDids-svds-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDids-svds-INT: +- name: CD_ids-svds INT +- alertingProfile: CD_ids-svds/alerting-profile/CDids-svds-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDids-svds-INT.EMEA-PreProd: +- name: CD_ids-svds INT +- alertingProfile: CD_ids-svds/alerting-profile/CDids-svds-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDids-svds-INT.NA-PreProd: +- name: CD_ids-svds INT +- alertingProfile: CD_ids-svds/alerting-profile/CDids-svds-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDids-svds-INT.CN-PreProd: +- name: CD_ids-svds INT +- alertingProfile: CD_ids-svds/alerting-profile/CDids-svds-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-svds/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_ids-svds/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-svds/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-svds/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_ids-svds/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-svds/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-svds/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_ids-svds/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..fee21fe3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-svds/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- ids-svds: default.json + +ids-svds: +- name: CD_ids-svds - +- mzName: CD_ids-svds/management-zone/CDids-svds.name +- mzId: CD_ids-svds/management-zone/CDids-svds.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-sync/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_ids-sync/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..13f140d5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-sync/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDids-sync-PROD: default.json +- CDids-sync-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDids-sync-PROD: +- name: CD_ids-sync PROD +- tag: ids-sync +- mzId: CD_ids-sync/management-zone/CDids-sync.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDids-sync-PROD.EMEA-Prod: +- name: CD_ids-sync PROD +- tag: ids-sync +- mzId: CD_ids-sync/management-zone/CDids-sync.id +- env: PROD +- skipDeployment: "false" +CDids-sync-PROD.NA-Prod: +- name: CD_ids-sync PROD +- tag: ids-sync +- mzId: CD_ids-sync/management-zone/CDids-sync.id +- env: PROD +- skipDeployment: "false" +CDids-sync-PROD.CN-Prod: +- name: CD_ids-sync PROD +- tag: ids-sync +- mzId: CD_ids-sync/management-zone/CDids-sync.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDids-sync-INT: +- name: CD_ids-sync INT +- tag: ids-sync +- mzId: CD_ids-sync/management-zone/CDids-sync.id +- env: INT +- skipDeployment: "true" +#Configuration +CDids-sync-INT.EMEA-PreProd: +- name: CD_ids-sync INT +- tag: ids-sync +- mzId: CD_ids-sync/management-zone/CDids-sync.id +- env: INT +- skipDeployment: "false" +CDids-sync-INT.NA-PreProd: +- name: CD_ids-sync INT +- tag: ids-sync +- mzId: CD_ids-sync/management-zone/CDids-sync.id +- env: INT +- skipDeployment: "false" +CDids-sync-INT.CN-PreProd: +- name: CD_ids-sync INT +- tag: ids-sync +- mzId: CD_ids-sync/management-zone/CDids-sync.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-sync/alerting-profile/default.json b/BMW-Dynatrace-config/CD_ids-sync/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-sync/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-sync/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_ids-sync/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-sync/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-sync/custom-service-java/README.md b/BMW-Dynatrace-config/CD_ids-sync/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-sync/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-sync/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_ids-sync/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-sync/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-sync/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_ids-sync/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-sync/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-sync/dashboard/README.md b/BMW-Dynatrace-config/CD_ids-sync/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-sync/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-sync/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_ids-sync/dashboard/dashboard.yaml new file mode 100644 index 00000000..fed1168b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-sync/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDids-sync-PROD-E2E: defaultPRODE2E.json +- CDids-sync-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDids-sync-PROD-E2E: +- name: CD_ids-sync PROD-E2E +- mzName: CD_ids-sync/management-zone/CDids-sync.name +- mzId: CD_ids-sync/management-zone/CDids-sync.id +- skipDeployment: "true" +#Configuration +CDids-sync-PROD-E2E.EMEA-Prod: +- name: CD_ids-sync PROD-E2E +- mzName: CD_ids-sync/management-zone/CDids-sync.name +- mzId: CD_ids-sync/management-zone/CDids-sync.id +- tag: ids-sync +- skipDeployment: "false" +CDids-sync-PROD-E2E.NA-Prod: +- name: CD_ids-sync PROD-E2E +- mzName: CD_ids-sync/management-zone/CDids-sync.name +- mzId: CD_ids-sync/management-zone/CDids-sync.id +- tag: ids-sync +- skipDeployment: "false" +CDids-sync-PROD-E2E.CN-Prod: +- name: CD_ids-sync PROD-E2E +- mzName: CD_ids-sync/management-zone/CDids-sync.name +- mzId: CD_ids-sync/management-zone/CDids-sync.id +- tag: ids-sync +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDids-sync-INT-TEST: +- name: CD_ids-sync INT-TEST +- mzName: CD_ids-sync/management-zone/CDids-sync.name +- mzId: CD_ids-sync/management-zone/CDids-sync.id +- tag: ids-sync +- skipDeployment: "true" +#Configuration +CDids-sync-INT-TEST.EMEA-PreProd: +- name: CD_ids-sync INT-TEST +- mzName: CD_ids-sync/management-zone/CDids-sync.name +- mzId: CD_ids-sync/management-zone/CDids-sync.id +- tag: ids-sync +- skipDeployment: "false" +CDids-sync-INT-TEST.NA-PreProd: +- name: CD_ids-sync INT-TEST +- mzName: CD_ids-sync/management-zone/CDids-sync.name +- mzId: CD_ids-sync/management-zone/CDids-sync.id +- env: INT +- skipDeployment: "false" +CDids-sync-INT-TEST.CN-PreProd: +- name: CD_ids-sync INT-TEST +- mzName: CD_ids-sync/management-zone/CDids-sync.name +- mzId: CD_ids-sync/management-zone/CDids-sync.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-sync/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_ids-sync/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-sync/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-sync/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_ids-sync/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-sync/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-sync/management-zone/README.md b/BMW-Dynatrace-config/CD_ids-sync/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-sync/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_ids-sync/management-zone/default.json b/BMW-Dynatrace-config/CD_ids-sync/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-sync/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-sync/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_ids-sync/management-zone/management-zone.yaml new file mode 100644 index 00000000..d6cf5b30 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-sync/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDids-sync: default.json + +CDids-sync: +- name: CD_ids-sync +- tag: ids-sync diff --git a/BMW-Dynatrace-config/CD_ids-sync/notification/README.md b/BMW-Dynatrace-config/CD_ids-sync/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-sync/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-sync/notification/email.json b/BMW-Dynatrace-config/CD_ids-sync/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-sync/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-sync/notification/msTeams.json b/BMW-Dynatrace-config/CD_ids-sync/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-sync/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-sync/notification/notification.yaml b/BMW-Dynatrace-config/CD_ids-sync/notification/notification.yaml new file mode 100644 index 00000000..e03a144e --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-sync/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDids-sync-PROD: msTeams.json +- CDids-sync-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDids-sync-PROD: +- name: CD_ids-sync PROD +- alertingProfile: CD_ids-sync/alerting-profile/CDids-sync-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDids-sync-PROD.EMEA-Prod: +- name: CD_ids-sync PROD +- alertingProfile: CD_ids-sync/alerting-profile/CDids-sync-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDids-sync-PROD.NA-Prod: +- name: CD_ids-sync PROD +- alertingProfile: CD_ids-sync/alerting-profile/CDids-sync-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDids-sync-PROD.CN-Prod: +- name: CD_ids-sync PROD +- alertingProfile: CD_ids-sync/alerting-profile/CDids-sync-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDids-sync-INT: +- name: CD_ids-sync INT +- alertingProfile: CD_ids-sync/alerting-profile/CDids-sync-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDids-sync-INT.EMEA-PreProd: +- name: CD_ids-sync INT +- alertingProfile: CD_ids-sync/alerting-profile/CDids-sync-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDids-sync-INT.NA-PreProd: +- name: CD_ids-sync INT +- alertingProfile: CD_ids-sync/alerting-profile/CDids-sync-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDids-sync-INT.CN-PreProd: +- name: CD_ids-sync INT +- alertingProfile: CD_ids-sync/alerting-profile/CDids-sync-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-sync/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_ids-sync/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-sync/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-sync/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_ids-sync/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-sync/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-sync/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_ids-sync/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..c4f07ea1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-sync/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- ids-sync: default.json + +ids-sync: +- name: CD_ids-sync - +- mzName: CD_ids-sync/management-zone/CDids-sync.name +- mzId: CD_ids-sync/management-zone/CDids-sync.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-ws/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_ids-ws/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..79a80206 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-ws/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDids-ws-PROD: default.json +- CDids-ws-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDids-ws-PROD: +- name: CD_ids-ws PROD +- tag: ids-ws +- mzId: CD_ids-ws/management-zone/CDids-ws.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDids-ws-PROD.EMEA-Prod: +- name: CD_ids-ws PROD +- tag: ids-ws +- mzId: CD_ids-ws/management-zone/CDids-ws.id +- env: PROD +- skipDeployment: "false" +CDids-ws-PROD.NA-Prod: +- name: CD_ids-ws PROD +- tag: ids-ws +- mzId: CD_ids-ws/management-zone/CDids-ws.id +- env: PROD +- skipDeployment: "false" +CDids-ws-PROD.CN-Prod: +- name: CD_ids-ws PROD +- tag: ids-ws +- mzId: CD_ids-ws/management-zone/CDids-ws.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDids-ws-INT: +- name: CD_ids-ws INT +- tag: ids-ws +- mzId: CD_ids-ws/management-zone/CDids-ws.id +- env: INT +- skipDeployment: "true" +#Configuration +CDids-ws-INT.EMEA-PreProd: +- name: CD_ids-ws INT +- tag: ids-ws +- mzId: CD_ids-ws/management-zone/CDids-ws.id +- env: INT +- skipDeployment: "false" +CDids-ws-INT.NA-PreProd: +- name: CD_ids-ws INT +- tag: ids-ws +- mzId: CD_ids-ws/management-zone/CDids-ws.id +- env: INT +- skipDeployment: "false" +CDids-ws-INT.CN-PreProd: +- name: CD_ids-ws INT +- tag: ids-ws +- mzId: CD_ids-ws/management-zone/CDids-ws.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-ws/alerting-profile/default.json b/BMW-Dynatrace-config/CD_ids-ws/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-ws/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-ws/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_ids-ws/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-ws/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-ws/custom-service-java/README.md b/BMW-Dynatrace-config/CD_ids-ws/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-ws/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-ws/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_ids-ws/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-ws/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-ws/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_ids-ws/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-ws/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-ws/dashboard/README.md b/BMW-Dynatrace-config/CD_ids-ws/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-ws/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-ws/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_ids-ws/dashboard/dashboard.yaml new file mode 100644 index 00000000..7cfa7f20 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-ws/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDids-ws-PROD-E2E: defaultPRODE2E.json +- CDids-ws-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDids-ws-PROD-E2E: +- name: CD_ids-ws PROD-E2E +- mzName: CD_ids-ws/management-zone/CDids-ws.name +- mzId: CD_ids-ws/management-zone/CDids-ws.id +- skipDeployment: "true" +#Configuration +CDids-ws-PROD-E2E.EMEA-Prod: +- name: CD_ids-ws PROD-E2E +- mzName: CD_ids-ws/management-zone/CDids-ws.name +- mzId: CD_ids-ws/management-zone/CDids-ws.id +- tag: ids-ws +- skipDeployment: "false" +CDids-ws-PROD-E2E.NA-Prod: +- name: CD_ids-ws PROD-E2E +- mzName: CD_ids-ws/management-zone/CDids-ws.name +- mzId: CD_ids-ws/management-zone/CDids-ws.id +- tag: ids-ws +- skipDeployment: "false" +CDids-ws-PROD-E2E.CN-Prod: +- name: CD_ids-ws PROD-E2E +- mzName: CD_ids-ws/management-zone/CDids-ws.name +- mzId: CD_ids-ws/management-zone/CDids-ws.id +- tag: ids-ws +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDids-ws-INT-TEST: +- name: CD_ids-ws INT-TEST +- mzName: CD_ids-ws/management-zone/CDids-ws.name +- mzId: CD_ids-ws/management-zone/CDids-ws.id +- tag: ids-ws +- skipDeployment: "true" +#Configuration +CDids-ws-INT-TEST.EMEA-PreProd: +- name: CD_ids-ws INT-TEST +- mzName: CD_ids-ws/management-zone/CDids-ws.name +- mzId: CD_ids-ws/management-zone/CDids-ws.id +- tag: ids-ws +- skipDeployment: "false" +CDids-ws-INT-TEST.NA-PreProd: +- name: CD_ids-ws INT-TEST +- mzName: CD_ids-ws/management-zone/CDids-ws.name +- mzId: CD_ids-ws/management-zone/CDids-ws.id +- env: INT +- skipDeployment: "false" +CDids-ws-INT-TEST.CN-PreProd: +- name: CD_ids-ws INT-TEST +- mzName: CD_ids-ws/management-zone/CDids-ws.name +- mzId: CD_ids-ws/management-zone/CDids-ws.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-ws/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_ids-ws/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-ws/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-ws/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_ids-ws/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-ws/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-ws/management-zone/README.md b/BMW-Dynatrace-config/CD_ids-ws/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-ws/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_ids-ws/management-zone/default.json b/BMW-Dynatrace-config/CD_ids-ws/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-ws/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-ws/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_ids-ws/management-zone/management-zone.yaml new file mode 100644 index 00000000..0cf4e0f0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-ws/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDids-ws: default.json + +CDids-ws: +- name: CD_ids-ws +- tag: ids-ws diff --git a/BMW-Dynatrace-config/CD_ids-ws/notification/README.md b/BMW-Dynatrace-config/CD_ids-ws/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-ws/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-ws/notification/email.json b/BMW-Dynatrace-config/CD_ids-ws/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-ws/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-ws/notification/msTeams.json b/BMW-Dynatrace-config/CD_ids-ws/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-ws/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-ws/notification/notification.yaml b/BMW-Dynatrace-config/CD_ids-ws/notification/notification.yaml new file mode 100644 index 00000000..505998aa --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-ws/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDids-ws-PROD: msTeams.json +- CDids-ws-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDids-ws-PROD: +- name: CD_ids-ws PROD +- alertingProfile: CD_ids-ws/alerting-profile/CDids-ws-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDids-ws-PROD.EMEA-Prod: +- name: CD_ids-ws PROD +- alertingProfile: CD_ids-ws/alerting-profile/CDids-ws-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDids-ws-PROD.NA-Prod: +- name: CD_ids-ws PROD +- alertingProfile: CD_ids-ws/alerting-profile/CDids-ws-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDids-ws-PROD.CN-Prod: +- name: CD_ids-ws PROD +- alertingProfile: CD_ids-ws/alerting-profile/CDids-ws-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDids-ws-INT: +- name: CD_ids-ws INT +- alertingProfile: CD_ids-ws/alerting-profile/CDids-ws-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDids-ws-INT.EMEA-PreProd: +- name: CD_ids-ws INT +- alertingProfile: CD_ids-ws/alerting-profile/CDids-ws-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDids-ws-INT.NA-PreProd: +- name: CD_ids-ws INT +- alertingProfile: CD_ids-ws/alerting-profile/CDids-ws-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDids-ws-INT.CN-PreProd: +- name: CD_ids-ws INT +- alertingProfile: CD_ids-ws/alerting-profile/CDids-ws-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-ws/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_ids-ws/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-ws/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-ws/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_ids-ws/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-ws/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-ws/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_ids-ws/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..80517b81 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-ws/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- ids-ws: default.json + +ids-ws: +- name: CD_ids-ws - +- mzName: CD_ids-ws/management-zone/CDids-ws.name +- mzId: CD_ids-ws/management-zone/CDids-ws.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_image-composite-service/alerting-profile/image-composite-service.json b/BMW-Dynatrace-config/CD_image-composite-service/alerting-profile/image-composite-service.json index d10ad44a..a994c66b 100644 --- a/BMW-Dynatrace-config/CD_image-composite-service/alerting-profile/image-composite-service.json +++ b/BMW-Dynatrace-config/CD_image-composite-service/alerting-profile/image-composite-service.json @@ -73,20 +73,6 @@ } ] } - }, - { - "delayInMinutes": 0, - "severityLevel": "MONITORING_UNAVAILABLE", - "tagFilter": { - "includeMode": "INCLUDE_ANY", - "tagFilters": [ - { - "context": "CONTEXTLESS", - "key": "Component", - "value": "{{.tag}}" - } - ] - } } ] } \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_image-composite-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_image-composite-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_image-composite-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_image-composite-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_image-composite-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_image-composite-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_image-composite-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_image-composite-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..0f8830da --- /dev/null +++ b/BMW-Dynatrace-config/CD_image-composite-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- image-composite-service: default.json + +image-composite-service: +- name: CD_image-composite-service - +- mzName: CD_image-composite-service/management-zone/CDimage-composite-service.name +- mzId: CD_image-composite-service/management-zone/CDimage-composite-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_imiles-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_imiles-service/alerting-profile/alerting-profile.yaml index 6e97ef31..5ece903a 100644 --- a/BMW-Dynatrace-config/CD_imiles-service/alerting-profile/alerting-profile.yaml +++ b/BMW-Dynatrace-config/CD_imiles-service/alerting-profile/alerting-profile.yaml @@ -1,6 +1,88 @@ -CDimiles-service: -- name: CD_imiles-service/management-zone/CDimiles-service.name +config: +- CDimiles-service-PROD: default.json +- CDimiles-service-E2E: default.json +- CDimiles-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDimiles-service-PROD: +- name: CD_imiles-service PROD - tag: imiles-service - mzId: CD_imiles-service/management-zone/CDimiles-service.id -config: -- CDimiles-service: imiles-service.json +- env: PROD +- skipDeployment: "true" +#Configuration +CDimiles-service-PROD.EMEA-Prod: +- name: CD_imiles-service PROD +- tag: imiles-service +- mzId: CD_imiles-service/management-zone/CDimiles-service.id +- env: PROD +- skipDeployment: "false" +CDimiles-service-PROD.NA-Prod: +- name: CD_imiles-service PROD +- tag: imiles-service +- mzId: CD_imiles-service/management-zone/CDimiles-service.id +- env: PROD +- skipDeployment: "false" +CDimiles-service-PROD.CN-Prod: +- name: CD_imiles-service PROD +- tag: imiles-service +- mzId: CD_imiles-service/management-zone/CDimiles-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDimiles-service-E2E: +- name: CD_imiles-service E2E +- tag: imiles-service +- mzId: CD_imiles-service/management-zone/CDimiles-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDimiles-service-E2E.EMEA-Prod: +- name: CD_imiles-service E2E +- tag: imiles-service +- mzId: CD_imiles-service/management-zone/CDimiles-service.id +- env: E2E +- skipDeployment: "false" +CDimiles-service-E2E.NA-Prod: +- name: CD_imiles-service E2E +- tag: imiles-service +- mzId: CD_imiles-service/management-zone/CDimiles-service.id +- env: E2E +- skipDeployment: "false" +CDimiles-service-E2E.CN-Prod: +- name: CD_imiles-service E2E +- tag: imiles-service +- mzId: CD_imiles-service/management-zone/CDimiles-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDimiles-service-INT: +- name: CD_imiles-service INT +- tag: imiles-service +- mzId: CD_imiles-service/management-zone/CDimiles-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDimiles-service-INT.EMEA-PreProd: +- name: CD_imiles-service INT +- tag: imiles-service +- mzId: CD_imiles-service/management-zone/CDimiles-service.id +- env: INT +- skipDeployment: "false" +CDimiles-service-INT.NA-PreProd: +- name: CD_imiles-service INT +- tag: imiles-service +- mzId: CD_imiles-service/management-zone/CDimiles-service.id +- env: INT +- skipDeployment: "false" +CDimiles-service-INT.CN-PreProd: +- name: CD_imiles-service INT +- tag: imiles-service +- mzId: CD_imiles-service/management-zone/CDimiles-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_imiles-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_imiles-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_imiles-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_imiles-service/alerting-profile/imiles-service.json b/BMW-Dynatrace-config/CD_imiles-service/alerting-profile/imiles-service.json deleted file mode 100644 index d10ad44a..00000000 --- a/BMW-Dynatrace-config/CD_imiles-service/alerting-profile/imiles-service.json +++ /dev/null @@ -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}}" - } - ] - } - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_imiles-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_imiles-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_imiles-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_imiles-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_imiles-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_imiles-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_imiles-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_imiles-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_imiles-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_imiles-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_imiles-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_imiles-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_imiles-service/dashboard/README.md b/BMW-Dynatrace-config/CD_imiles-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_imiles-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_imiles-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_imiles-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..2a9c9d30 --- /dev/null +++ b/BMW-Dynatrace-config/CD_imiles-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDimiles-service-PROD-E2E: defaultPRODE2E.json +- CDimiles-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDimiles-service-PROD-E2E: +- name: CD_imiles-service PROD +- mzName: CD_imiles-service/management-zone/CDimiles-service.name +- mzId: CD_imiles-service/management-zone/CDimiles-service.id +- skipDeployment: "true" +#Configuration +CDimiles-service-PROD-E2E.EMEA-Prod: +- name: CD_imiles-service PROD +- mzName: CD_imiles-service/management-zone/CDimiles-service.name +- mzId: CD_imiles-service/management-zone/CDimiles-service.id +- tag: imiles-service +- skipDeployment: "false" +CDimiles-service-PROD-E2E.NA-Prod: +- name: CD_imiles-service PROD +- mzName: CD_imiles-service/management-zone/CDimiles-service.name +- mzId: CD_imiles-service/management-zone/CDimiles-service.id +- tag: imiles-service +- skipDeployment: "false" +CDimiles-service-PROD-E2E.CN-Prod: +- name: CD_imiles-service PROD +- mzName: CD_imiles-service/management-zone/CDimiles-service.name +- mzId: CD_imiles-service/management-zone/CDimiles-service.id +- tag: imiles-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDimiles-service-INT-TEST: +- name: CD_imiles-service INT-TEST +- mzName: CD_imiles-service/management-zone/CDimiles-service.name +- mzId: CD_imiles-service/management-zone/CDimiles-service.id +- tag: imiles-service +- skipDeployment: "true" +#Configuration +CDimiles-service-INT-TEST.EMEA-PreProd: +- name: CD_imiles-service INT-TEST +- mzName: CD_imiles-service/management-zone/CDimiles-service.name +- mzId: CD_imiles-service/management-zone/CDimiles-service.id +- tag: imiles-service +- skipDeployment: "false" +CDimiles-service-INT-TEST.NA-PreProd: +- name: CD_imiles-service INT-TEST +- mzName: CD_imiles-service/management-zone/CDimiles-service.name +- mzId: CD_imiles-service/management-zone/CDimiles-service.id +- env: INT +- skipDeployment: "false" +CDimiles-service-INT-TEST.CN-PreProd: +- name: CD_imiles-service INT-TEST +- mzName: CD_imiles-service/management-zone/CDimiles-service.name +- mzId: CD_imiles-service/management-zone/CDimiles-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_imiles-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_imiles-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_imiles-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_imiles-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_imiles-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_imiles-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_imiles-service/management-zone/CDimiles-service.json b/BMW-Dynatrace-config/CD_imiles-service/management-zone/CDimiles-service.json deleted file mode 100644 index b2a9367b..00000000 --- a/BMW-Dynatrace-config/CD_imiles-service/management-zone/CDimiles-service.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "dimensionalRules": [], - "name": "{{.name}}", - "rules": [ - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "{{.tag}}" - } - }, - "key": { - "attribute": "SERVICE_TAGS" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "HealthResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PingResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PrometheusResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - } - ], - "enabled": true, - "propagationTypes": [ - "SERVICE_TO_PROCESS_GROUP_LIKE", - "SERVICE_TO_HOST_LIKE" - ], - "type": "SERVICE" - }, - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "{{.tag}}" - } - }, - "key": { - "attribute": "PROCESS_GROUP_TAGS" - } - } - ], - "enabled": true, - "propagationTypes": [ - "PROCESS_GROUP_TO_HOST" - ], - "type": "PROCESS_GROUP" - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_imiles-service/management-zone/README.md b/BMW-Dynatrace-config/CD_imiles-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_imiles-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_imiles-service/management-zone/default.json b/BMW-Dynatrace-config/CD_imiles-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_imiles-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_imiles-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_imiles-service/management-zone/management-zone.yaml index 725ca4cd..13c9f27e 100644 --- a/BMW-Dynatrace-config/CD_imiles-service/management-zone/management-zone.yaml +++ b/BMW-Dynatrace-config/CD_imiles-service/management-zone/management-zone.yaml @@ -1,20 +1,6 @@ -CDimiles-service.CN-PreProd: -- name: CD_imiles-service -- tag: imiles-service -CDimiles-service.CN-Prod: -- name: CD_imiles-service -- tag: imiles-service -CDimiles-service.EMEA-PreProd: -- name: CD_imiles-service -- tag: imiles-service -CDimiles-service.EMEA-Prod: -- name: CD_imiles-service -- tag: imiles-service -CDimiles-service.NA-PreProd: -- name: CD_imiles-service -- tag: imiles-service -CDimiles-service.NA-Prod: -- name: CD_imiles-service -- tag: imiles-service config: -- CDimiles-service: CDimiles-service.json +- CDimiles-service: default.json + +CDimiles-service: +- name: CD_imiles-service +- tag: imiles-service diff --git a/BMW-Dynatrace-config/CD_imiles-service/notification/README.md b/BMW-Dynatrace-config/CD_imiles-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_imiles-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_imiles-service/notification/email.json b/BMW-Dynatrace-config/CD_imiles-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_imiles-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_imiles-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_imiles-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_imiles-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_imiles-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_imiles-service/notification/notification.yaml new file mode 100644 index 00000000..47ce38b6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_imiles-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDimiles-service-PROD: msTeams.json +- CDimiles-service-E2E: msTeams.json +- CDimiles-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDimiles-service-PROD: +- name: CD_imiles-service PROD +- alertingProfile: CD_imiles-service/alerting-profile/CDimiles-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDimiles-service-PROD.EMEA-Prod: +- name: CD_imiles-service PROD +- alertingProfile: CD_imiles-service/alerting-profile/CDimiles-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDimiles-service-PROD.NA-Prod: +- name: CD_imiles-service PROD +- alertingProfile: CD_imiles-service/alerting-profile/CDimiles-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDimiles-service-PROD.CN-Prod: +- name: CD_imiles-service PROD +- alertingProfile: CD_imiles-service/alerting-profile/CDimiles-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDimiles-service-E2E: +- name: CD_imiles-service E2E +- alertingProfile: CD_imiles-service/alerting-profile/CDimiles-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDimiles-service-E2E.EMEA-Prod: +- name: CD_imiles-service E2E +- alertingProfile: CD_imiles-service/alerting-profile/CDimiles-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDimiles-service-E2E.NA-Prod: +- name: CD_imiles-service E2E +- alertingProfile: CD_imiles-service/alerting-profile/CDimiles-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDimiles-service-E2E.CN-Prod: +- name: CD_imiles-service E2E +- alertingProfile: CD_imiles-service/alerting-profile/CDimiles-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDimiles-service-INT: +- name: CD_imiles-service INT +- alertingProfile: CD_imiles-service/alerting-profile/CDimiles-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDimiles-service-INT.EMEA-PreProd: +- name: CD_imiles-service INT +- alertingProfile: CD_imiles-service/alerting-profile/CDimiles-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDimiles-service-INT.NA-PreProd: +- name: CD_imiles-service INT +- alertingProfile: CD_imiles-service/alerting-profile/CDimiles-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDimiles-service-INT.CN-PreProd: +- name: CD_imiles-service INT +- alertingProfile: CD_imiles-service/alerting-profile/CDimiles-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_imiles-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_imiles-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_imiles-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_imiles-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_imiles-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_imiles-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_imiles-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_imiles-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..44ab17b6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_imiles-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- imiles-service: default.json + +imiles-service: +- name: CD_imiles-service - +- mzName: CD_imiles-service/management-zone/CDimiles-service.name +- mzId: CD_imiles-service/management-zone/CDimiles-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ipa-gateway/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_ipa-gateway/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..3e3e084f --- /dev/null +++ b/BMW-Dynatrace-config/CD_ipa-gateway/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDipa-gateway-PROD: default.json +- CDipa-gateway-E2E: default.json +- CDipa-gateway-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDipa-gateway-PROD: +- name: CD_ipa-gateway PROD +- tag: ipa-gateway +- mzId: CD_ipa-gateway/management-zone/CDipa-gateway.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDipa-gateway-PROD.EMEA-Prod: +- name: CD_ipa-gateway PROD +- tag: ipa-gateway +- mzId: CD_ipa-gateway/management-zone/CDipa-gateway.id +- env: PROD +- skipDeployment: "false" +CDipa-gateway-PROD.NA-Prod: +- name: CD_ipa-gateway PROD +- tag: ipa-gateway +- mzId: CD_ipa-gateway/management-zone/CDipa-gateway.id +- env: PROD +- skipDeployment: "false" +CDipa-gateway-PROD.CN-Prod: +- name: CD_ipa-gateway PROD +- tag: ipa-gateway +- mzId: CD_ipa-gateway/management-zone/CDipa-gateway.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDipa-gateway-E2E: +- name: CD_ipa-gateway E2E +- tag: ipa-gateway +- mzId: CD_ipa-gateway/management-zone/CDipa-gateway.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDipa-gateway-E2E.EMEA-Prod: +- name: CD_ipa-gateway E2E +- tag: ipa-gateway +- mzId: CD_ipa-gateway/management-zone/CDipa-gateway.id +- env: E2E +- skipDeployment: "false" +CDipa-gateway-E2E.NA-Prod: +- name: CD_ipa-gateway E2E +- tag: ipa-gateway +- mzId: CD_ipa-gateway/management-zone/CDipa-gateway.id +- env: E2E +- skipDeployment: "false" +CDipa-gateway-E2E.CN-Prod: +- name: CD_ipa-gateway E2E +- tag: ipa-gateway +- mzId: CD_ipa-gateway/management-zone/CDipa-gateway.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDipa-gateway-INT: +- name: CD_ipa-gateway INT +- tag: ipa-gateway +- mzId: CD_ipa-gateway/management-zone/CDipa-gateway.id +- env: INT +- skipDeployment: "true" +#Configuration +CDipa-gateway-INT.EMEA-PreProd: +- name: CD_ipa-gateway INT +- tag: ipa-gateway +- mzId: CD_ipa-gateway/management-zone/CDipa-gateway.id +- env: INT +- skipDeployment: "false" +CDipa-gateway-INT.NA-PreProd: +- name: CD_ipa-gateway INT +- tag: ipa-gateway +- mzId: CD_ipa-gateway/management-zone/CDipa-gateway.id +- env: INT +- skipDeployment: "false" +CDipa-gateway-INT.CN-PreProd: +- name: CD_ipa-gateway INT +- tag: ipa-gateway +- mzId: CD_ipa-gateway/management-zone/CDipa-gateway.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ipa-gateway/alerting-profile/default.json b/BMW-Dynatrace-config/CD_ipa-gateway/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ipa-gateway/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ipa-gateway/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_ipa-gateway/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ipa-gateway/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ipa-gateway/custom-service-java/README.md b/BMW-Dynatrace-config/CD_ipa-gateway/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ipa-gateway/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ipa-gateway/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_ipa-gateway/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ipa-gateway/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ipa-gateway/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_ipa-gateway/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ipa-gateway/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ipa-gateway/dashboard/README.md b/BMW-Dynatrace-config/CD_ipa-gateway/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ipa-gateway/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ipa-gateway/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_ipa-gateway/dashboard/dashboard.yaml new file mode 100644 index 00000000..597d7ef8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ipa-gateway/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDipa-gateway-PROD-E2E: defaultPRODE2E.json +- CDipa-gateway-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDipa-gateway-PROD-E2E: +- name: CD_ipa-gateway PROD +- mzName: CD_ipa-gateway/management-zone/CDipa-gateway.name +- mzId: CD_ipa-gateway/management-zone/CDipa-gateway.id +- skipDeployment: "true" +#Configuration +CDipa-gateway-PROD-E2E.EMEA-Prod: +- name: CD_ipa-gateway PROD +- mzName: CD_ipa-gateway/management-zone/CDipa-gateway.name +- mzId: CD_ipa-gateway/management-zone/CDipa-gateway.id +- tag: ipa-gateway +- skipDeployment: "false" +CDipa-gateway-PROD-E2E.NA-Prod: +- name: CD_ipa-gateway PROD +- mzName: CD_ipa-gateway/management-zone/CDipa-gateway.name +- mzId: CD_ipa-gateway/management-zone/CDipa-gateway.id +- tag: ipa-gateway +- skipDeployment: "false" +CDipa-gateway-PROD-E2E.CN-Prod: +- name: CD_ipa-gateway PROD +- mzName: CD_ipa-gateway/management-zone/CDipa-gateway.name +- mzId: CD_ipa-gateway/management-zone/CDipa-gateway.id +- tag: ipa-gateway +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDipa-gateway-INT-TEST: +- name: CD_ipa-gateway INT-TEST +- mzName: CD_ipa-gateway/management-zone/CDipa-gateway.name +- mzId: CD_ipa-gateway/management-zone/CDipa-gateway.id +- tag: ipa-gateway +- skipDeployment: "true" +#Configuration +CDipa-gateway-INT-TEST.EMEA-PreProd: +- name: CD_ipa-gateway INT-TEST +- mzName: CD_ipa-gateway/management-zone/CDipa-gateway.name +- mzId: CD_ipa-gateway/management-zone/CDipa-gateway.id +- tag: ipa-gateway +- skipDeployment: "false" +CDipa-gateway-INT-TEST.NA-PreProd: +- name: CD_ipa-gateway INT-TEST +- mzName: CD_ipa-gateway/management-zone/CDipa-gateway.name +- mzId: CD_ipa-gateway/management-zone/CDipa-gateway.id +- env: INT +- skipDeployment: "false" +CDipa-gateway-INT-TEST.CN-PreProd: +- name: CD_ipa-gateway INT-TEST +- mzName: CD_ipa-gateway/management-zone/CDipa-gateway.name +- mzId: CD_ipa-gateway/management-zone/CDipa-gateway.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ipa-gateway/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_ipa-gateway/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ipa-gateway/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ipa-gateway/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_ipa-gateway/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_ipa-gateway/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ipa-gateway/management-zone/README.md b/BMW-Dynatrace-config/CD_ipa-gateway/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ipa-gateway/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_ipa-gateway/management-zone/default.json b/BMW-Dynatrace-config/CD_ipa-gateway/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_ipa-gateway/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ipa-gateway/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_ipa-gateway/management-zone/management-zone.yaml new file mode 100644 index 00000000..71dc5f41 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ipa-gateway/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDipa-gateway: default.json + +CDipa-gateway: +- name: CD_ipa-gateway +- tag: ipa-gateway diff --git a/BMW-Dynatrace-config/CD_ipa-gateway/notification/README.md b/BMW-Dynatrace-config/CD_ipa-gateway/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ipa-gateway/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ipa-gateway/notification/email.json b/BMW-Dynatrace-config/CD_ipa-gateway/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ipa-gateway/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ipa-gateway/notification/msTeams.json b/BMW-Dynatrace-config/CD_ipa-gateway/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ipa-gateway/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ipa-gateway/notification/notification.yaml b/BMW-Dynatrace-config/CD_ipa-gateway/notification/notification.yaml new file mode 100644 index 00000000..72e53994 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ipa-gateway/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDipa-gateway-PROD: msTeams.json +- CDipa-gateway-E2E: msTeams.json +- CDipa-gateway-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDipa-gateway-PROD: +- name: CD_ipa-gateway PROD +- alertingProfile: CD_ipa-gateway/alerting-profile/CDipa-gateway-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDipa-gateway-PROD.EMEA-Prod: +- name: CD_ipa-gateway PROD +- alertingProfile: CD_ipa-gateway/alerting-profile/CDipa-gateway-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDipa-gateway-PROD.NA-Prod: +- name: CD_ipa-gateway PROD +- alertingProfile: CD_ipa-gateway/alerting-profile/CDipa-gateway-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDipa-gateway-PROD.CN-Prod: +- name: CD_ipa-gateway PROD +- alertingProfile: CD_ipa-gateway/alerting-profile/CDipa-gateway-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDipa-gateway-E2E: +- name: CD_ipa-gateway E2E +- alertingProfile: CD_ipa-gateway/alerting-profile/CDipa-gateway-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDipa-gateway-E2E.EMEA-Prod: +- name: CD_ipa-gateway E2E +- alertingProfile: CD_ipa-gateway/alerting-profile/CDipa-gateway-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDipa-gateway-E2E.NA-Prod: +- name: CD_ipa-gateway E2E +- alertingProfile: CD_ipa-gateway/alerting-profile/CDipa-gateway-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDipa-gateway-E2E.CN-Prod: +- name: CD_ipa-gateway E2E +- alertingProfile: CD_ipa-gateway/alerting-profile/CDipa-gateway-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDipa-gateway-INT: +- name: CD_ipa-gateway INT +- alertingProfile: CD_ipa-gateway/alerting-profile/CDipa-gateway-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDipa-gateway-INT.EMEA-PreProd: +- name: CD_ipa-gateway INT +- alertingProfile: CD_ipa-gateway/alerting-profile/CDipa-gateway-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDipa-gateway-INT.NA-PreProd: +- name: CD_ipa-gateway INT +- alertingProfile: CD_ipa-gateway/alerting-profile/CDipa-gateway-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDipa-gateway-INT.CN-PreProd: +- name: CD_ipa-gateway INT +- alertingProfile: CD_ipa-gateway/alerting-profile/CDipa-gateway-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ipa-gateway/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_ipa-gateway/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_ipa-gateway/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ipa-gateway/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_ipa-gateway/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ipa-gateway/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ipa-gateway/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_ipa-gateway/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..5407f795 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ipa-gateway/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- ipa-gateway: default.json + +ipa-gateway: +- name: CD_ipa-gateway - +- mzName: CD_ipa-gateway/management-zone/CDipa-gateway.name +- mzId: CD_ipa-gateway/management-zone/CDipa-gateway.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_jdssp21/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_jdssp21/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..b502bba7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_jdssp21/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDjdssp21-PROD: default.json +- CDjdssp21-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDjdssp21-PROD: +- name: CD_jdssp21 PROD +- tag: jdssp21 +- mzId: CD_jdssp21/management-zone/CDjdssp21.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDjdssp21-PROD.EMEA-Prod: +- name: CD_jdssp21 PROD +- tag: jdssp21 +- mzId: CD_jdssp21/management-zone/CDjdssp21.id +- env: PROD +- skipDeployment: "false" +CDjdssp21-PROD.NA-Prod: +- name: CD_jdssp21 PROD +- tag: jdssp21 +- mzId: CD_jdssp21/management-zone/CDjdssp21.id +- env: PROD +- skipDeployment: "false" +CDjdssp21-PROD.CN-Prod: +- name: CD_jdssp21 PROD +- tag: jdssp21 +- mzId: CD_jdssp21/management-zone/CDjdssp21.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDjdssp21-INT: +- name: CD_jdssp21 INT +- tag: jdssp21 +- mzId: CD_jdssp21/management-zone/CDjdssp21.id +- env: INT +- skipDeployment: "true" +#Configuration +CDjdssp21-INT.EMEA-PreProd: +- name: CD_jdssp21 INT +- tag: jdssp21 +- mzId: CD_jdssp21/management-zone/CDjdssp21.id +- env: INT +- skipDeployment: "false" +CDjdssp21-INT.NA-PreProd: +- name: CD_jdssp21 INT +- tag: jdssp21 +- mzId: CD_jdssp21/management-zone/CDjdssp21.id +- env: INT +- skipDeployment: "false" +CDjdssp21-INT.CN-PreProd: +- name: CD_jdssp21 INT +- tag: jdssp21 +- mzId: CD_jdssp21/management-zone/CDjdssp21.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_jdssp21/alerting-profile/default.json b/BMW-Dynatrace-config/CD_jdssp21/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_jdssp21/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_jdssp21/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_jdssp21/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_jdssp21/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_jdssp21/custom-service-java/README.md b/BMW-Dynatrace-config/CD_jdssp21/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_jdssp21/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_jdssp21/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_jdssp21/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_jdssp21/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_jdssp21/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_jdssp21/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_jdssp21/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_jdssp21/dashboard/README.md b/BMW-Dynatrace-config/CD_jdssp21/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_jdssp21/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_jdssp21/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_jdssp21/dashboard/dashboard.yaml new file mode 100644 index 00000000..e70b0b6d --- /dev/null +++ b/BMW-Dynatrace-config/CD_jdssp21/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDjdssp21-PROD-E2E: defaultPRODE2E.json +- CDjdssp21-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDjdssp21-PROD-E2E: +- name: CD_jdssp21 PROD-E2E +- mzName: CD_jdssp21/management-zone/CDjdssp21.name +- mzId: CD_jdssp21/management-zone/CDjdssp21.id +- skipDeployment: "true" +#Configuration +CDjdssp21-PROD-E2E.EMEA-Prod: +- name: CD_jdssp21 PROD-E2E +- mzName: CD_jdssp21/management-zone/CDjdssp21.name +- mzId: CD_jdssp21/management-zone/CDjdssp21.id +- tag: jdssp21 +- skipDeployment: "false" +CDjdssp21-PROD-E2E.NA-Prod: +- name: CD_jdssp21 PROD-E2E +- mzName: CD_jdssp21/management-zone/CDjdssp21.name +- mzId: CD_jdssp21/management-zone/CDjdssp21.id +- tag: jdssp21 +- skipDeployment: "false" +CDjdssp21-PROD-E2E.CN-Prod: +- name: CD_jdssp21 PROD-E2E +- mzName: CD_jdssp21/management-zone/CDjdssp21.name +- mzId: CD_jdssp21/management-zone/CDjdssp21.id +- tag: jdssp21 +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDjdssp21-INT-TEST: +- name: CD_jdssp21 INT-TEST +- mzName: CD_jdssp21/management-zone/CDjdssp21.name +- mzId: CD_jdssp21/management-zone/CDjdssp21.id +- tag: jdssp21 +- skipDeployment: "true" +#Configuration +CDjdssp21-INT-TEST.EMEA-PreProd: +- name: CD_jdssp21 INT-TEST +- mzName: CD_jdssp21/management-zone/CDjdssp21.name +- mzId: CD_jdssp21/management-zone/CDjdssp21.id +- tag: jdssp21 +- skipDeployment: "false" +CDjdssp21-INT-TEST.NA-PreProd: +- name: CD_jdssp21 INT-TEST +- mzName: CD_jdssp21/management-zone/CDjdssp21.name +- mzId: CD_jdssp21/management-zone/CDjdssp21.id +- env: INT +- skipDeployment: "false" +CDjdssp21-INT-TEST.CN-PreProd: +- name: CD_jdssp21 INT-TEST +- mzName: CD_jdssp21/management-zone/CDjdssp21.name +- mzId: CD_jdssp21/management-zone/CDjdssp21.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_jdssp21/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_jdssp21/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_jdssp21/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_jdssp21/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_jdssp21/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_jdssp21/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_jdssp21/management-zone/README.md b/BMW-Dynatrace-config/CD_jdssp21/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_jdssp21/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_jdssp21/management-zone/default.json b/BMW-Dynatrace-config/CD_jdssp21/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_jdssp21/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_jdssp21/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_jdssp21/management-zone/management-zone.yaml new file mode 100644 index 00000000..b637d814 --- /dev/null +++ b/BMW-Dynatrace-config/CD_jdssp21/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDjdssp21: default.json + +CDjdssp21: +- name: CD_jdssp21 +- tag: jdssp21 diff --git a/BMW-Dynatrace-config/CD_jdssp21/notification/README.md b/BMW-Dynatrace-config/CD_jdssp21/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_jdssp21/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_jdssp21/notification/email.json b/BMW-Dynatrace-config/CD_jdssp21/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_jdssp21/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_jdssp21/notification/msTeams.json b/BMW-Dynatrace-config/CD_jdssp21/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_jdssp21/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_jdssp21/notification/notification.yaml b/BMW-Dynatrace-config/CD_jdssp21/notification/notification.yaml new file mode 100644 index 00000000..147b20fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_jdssp21/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDjdssp21-PROD: msTeams.json +- CDjdssp21-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDjdssp21-PROD: +- name: CD_jdssp21 PROD +- alertingProfile: CD_jdssp21/alerting-profile/CDjdssp21-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDjdssp21-PROD.EMEA-Prod: +- name: CD_jdssp21 PROD +- alertingProfile: CD_jdssp21/alerting-profile/CDjdssp21-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDjdssp21-PROD.NA-Prod: +- name: CD_jdssp21 PROD +- alertingProfile: CD_jdssp21/alerting-profile/CDjdssp21-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDjdssp21-PROD.CN-Prod: +- name: CD_jdssp21 PROD +- alertingProfile: CD_jdssp21/alerting-profile/CDjdssp21-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDjdssp21-INT: +- name: CD_jdssp21 INT +- alertingProfile: CD_jdssp21/alerting-profile/CDjdssp21-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDjdssp21-INT.EMEA-PreProd: +- name: CD_jdssp21 INT +- alertingProfile: CD_jdssp21/alerting-profile/CDjdssp21-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDjdssp21-INT.NA-PreProd: +- name: CD_jdssp21 INT +- alertingProfile: CD_jdssp21/alerting-profile/CDjdssp21-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDjdssp21-INT.CN-PreProd: +- name: CD_jdssp21 INT +- alertingProfile: CD_jdssp21/alerting-profile/CDjdssp21-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_jdssp21/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_jdssp21/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_jdssp21/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_jdssp21/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_jdssp21/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_jdssp21/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_jdssp21/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_jdssp21/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..8041b47f --- /dev/null +++ b/BMW-Dynatrace-config/CD_jdssp21/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- jdssp21: default.json + +jdssp21: +- name: CD_jdssp21 - +- mzName: CD_jdssp21/management-zone/CDjdssp21.name +- mzId: CD_jdssp21/management-zone/CDjdssp21.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-deletion-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_legacy-deletion-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..3152564e --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-deletion-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDlegacy-deletion-service-PROD: default.json +- CDlegacy-deletion-service-E2E: default.json +- CDlegacy-deletion-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDlegacy-deletion-service-PROD: +- name: CD_legacy-deletion-service PROD +- tag: legacy-deletion-service +- mzId: CD_legacy-deletion-service/management-zone/CDlegacy-deletion-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDlegacy-deletion-service-PROD.EMEA-Prod: +- name: CD_legacy-deletion-service PROD +- tag: legacy-deletion-service +- mzId: CD_legacy-deletion-service/management-zone/CDlegacy-deletion-service.id +- env: PROD +- skipDeployment: "false" +CDlegacy-deletion-service-PROD.NA-Prod: +- name: CD_legacy-deletion-service PROD +- tag: legacy-deletion-service +- mzId: CD_legacy-deletion-service/management-zone/CDlegacy-deletion-service.id +- env: PROD +- skipDeployment: "false" +CDlegacy-deletion-service-PROD.CN-Prod: +- name: CD_legacy-deletion-service PROD +- tag: legacy-deletion-service +- mzId: CD_legacy-deletion-service/management-zone/CDlegacy-deletion-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDlegacy-deletion-service-E2E: +- name: CD_legacy-deletion-service E2E +- tag: legacy-deletion-service +- mzId: CD_legacy-deletion-service/management-zone/CDlegacy-deletion-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDlegacy-deletion-service-E2E.EMEA-Prod: +- name: CD_legacy-deletion-service E2E +- tag: legacy-deletion-service +- mzId: CD_legacy-deletion-service/management-zone/CDlegacy-deletion-service.id +- env: E2E +- skipDeployment: "false" +CDlegacy-deletion-service-E2E.NA-Prod: +- name: CD_legacy-deletion-service E2E +- tag: legacy-deletion-service +- mzId: CD_legacy-deletion-service/management-zone/CDlegacy-deletion-service.id +- env: E2E +- skipDeployment: "false" +CDlegacy-deletion-service-E2E.CN-Prod: +- name: CD_legacy-deletion-service E2E +- tag: legacy-deletion-service +- mzId: CD_legacy-deletion-service/management-zone/CDlegacy-deletion-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDlegacy-deletion-service-INT: +- name: CD_legacy-deletion-service INT +- tag: legacy-deletion-service +- mzId: CD_legacy-deletion-service/management-zone/CDlegacy-deletion-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDlegacy-deletion-service-INT.EMEA-PreProd: +- name: CD_legacy-deletion-service INT +- tag: legacy-deletion-service +- mzId: CD_legacy-deletion-service/management-zone/CDlegacy-deletion-service.id +- env: INT +- skipDeployment: "false" +CDlegacy-deletion-service-INT.NA-PreProd: +- name: CD_legacy-deletion-service INT +- tag: legacy-deletion-service +- mzId: CD_legacy-deletion-service/management-zone/CDlegacy-deletion-service.id +- env: INT +- skipDeployment: "false" +CDlegacy-deletion-service-INT.CN-PreProd: +- name: CD_legacy-deletion-service INT +- tag: legacy-deletion-service +- mzId: CD_legacy-deletion-service/management-zone/CDlegacy-deletion-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-deletion-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_legacy-deletion-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-deletion-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-deletion-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_legacy-deletion-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-deletion-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-deletion-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_legacy-deletion-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-deletion-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-deletion-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_legacy-deletion-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-deletion-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-deletion-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_legacy-deletion-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-deletion-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-deletion-service/dashboard/README.md b/BMW-Dynatrace-config/CD_legacy-deletion-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-deletion-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-deletion-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_legacy-deletion-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..0c31d0c0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-deletion-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDlegacy-deletion-service-PROD-E2E: defaultPRODE2E.json +- CDlegacy-deletion-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDlegacy-deletion-service-PROD-E2E: +- name: CD_legacy-deletion-service PROD +- mzName: CD_legacy-deletion-service/management-zone/CDlegacy-deletion-service.name +- mzId: CD_legacy-deletion-service/management-zone/CDlegacy-deletion-service.id +- skipDeployment: "true" +#Configuration +CDlegacy-deletion-service-PROD-E2E.EMEA-Prod: +- name: CD_legacy-deletion-service PROD +- mzName: CD_legacy-deletion-service/management-zone/CDlegacy-deletion-service.name +- mzId: CD_legacy-deletion-service/management-zone/CDlegacy-deletion-service.id +- tag: legacy-deletion-service +- skipDeployment: "false" +CDlegacy-deletion-service-PROD-E2E.NA-Prod: +- name: CD_legacy-deletion-service PROD +- mzName: CD_legacy-deletion-service/management-zone/CDlegacy-deletion-service.name +- mzId: CD_legacy-deletion-service/management-zone/CDlegacy-deletion-service.id +- tag: legacy-deletion-service +- skipDeployment: "false" +CDlegacy-deletion-service-PROD-E2E.CN-Prod: +- name: CD_legacy-deletion-service PROD +- mzName: CD_legacy-deletion-service/management-zone/CDlegacy-deletion-service.name +- mzId: CD_legacy-deletion-service/management-zone/CDlegacy-deletion-service.id +- tag: legacy-deletion-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDlegacy-deletion-service-INT-TEST: +- name: CD_legacy-deletion-service INT-TEST +- mzName: CD_legacy-deletion-service/management-zone/CDlegacy-deletion-service.name +- mzId: CD_legacy-deletion-service/management-zone/CDlegacy-deletion-service.id +- tag: legacy-deletion-service +- skipDeployment: "true" +#Configuration +CDlegacy-deletion-service-INT-TEST.EMEA-PreProd: +- name: CD_legacy-deletion-service INT-TEST +- mzName: CD_legacy-deletion-service/management-zone/CDlegacy-deletion-service.name +- mzId: CD_legacy-deletion-service/management-zone/CDlegacy-deletion-service.id +- tag: legacy-deletion-service +- skipDeployment: "false" +CDlegacy-deletion-service-INT-TEST.NA-PreProd: +- name: CD_legacy-deletion-service INT-TEST +- mzName: CD_legacy-deletion-service/management-zone/CDlegacy-deletion-service.name +- mzId: CD_legacy-deletion-service/management-zone/CDlegacy-deletion-service.id +- env: INT +- skipDeployment: "false" +CDlegacy-deletion-service-INT-TEST.CN-PreProd: +- name: CD_legacy-deletion-service INT-TEST +- mzName: CD_legacy-deletion-service/management-zone/CDlegacy-deletion-service.name +- mzId: CD_legacy-deletion-service/management-zone/CDlegacy-deletion-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-deletion-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_legacy-deletion-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-deletion-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-deletion-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_legacy-deletion-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-deletion-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-deletion-service/management-zone/README.md b/BMW-Dynatrace-config/CD_legacy-deletion-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-deletion-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_legacy-deletion-service/management-zone/default.json b/BMW-Dynatrace-config/CD_legacy-deletion-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-deletion-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-deletion-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_legacy-deletion-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..01a170da --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-deletion-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDlegacy-deletion-service: default.json + +CDlegacy-deletion-service: +- name: CD_legacy-deletion-service +- tag: legacy-deletion-service diff --git a/BMW-Dynatrace-config/CD_legacy-deletion-service/notification/README.md b/BMW-Dynatrace-config/CD_legacy-deletion-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-deletion-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-deletion-service/notification/email.json b/BMW-Dynatrace-config/CD_legacy-deletion-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-deletion-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-deletion-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_legacy-deletion-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-deletion-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-deletion-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_legacy-deletion-service/notification/notification.yaml new file mode 100644 index 00000000..418257f4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-deletion-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDlegacy-deletion-service-PROD: msTeams.json +- CDlegacy-deletion-service-E2E: msTeams.json +- CDlegacy-deletion-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDlegacy-deletion-service-PROD: +- name: CD_legacy-deletion-service PROD +- alertingProfile: CD_legacy-deletion-service/alerting-profile/CDlegacy-deletion-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDlegacy-deletion-service-PROD.EMEA-Prod: +- name: CD_legacy-deletion-service PROD +- alertingProfile: CD_legacy-deletion-service/alerting-profile/CDlegacy-deletion-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDlegacy-deletion-service-PROD.NA-Prod: +- name: CD_legacy-deletion-service PROD +- alertingProfile: CD_legacy-deletion-service/alerting-profile/CDlegacy-deletion-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDlegacy-deletion-service-PROD.CN-Prod: +- name: CD_legacy-deletion-service PROD +- alertingProfile: CD_legacy-deletion-service/alerting-profile/CDlegacy-deletion-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDlegacy-deletion-service-E2E: +- name: CD_legacy-deletion-service E2E +- alertingProfile: CD_legacy-deletion-service/alerting-profile/CDlegacy-deletion-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDlegacy-deletion-service-E2E.EMEA-Prod: +- name: CD_legacy-deletion-service E2E +- alertingProfile: CD_legacy-deletion-service/alerting-profile/CDlegacy-deletion-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDlegacy-deletion-service-E2E.NA-Prod: +- name: CD_legacy-deletion-service E2E +- alertingProfile: CD_legacy-deletion-service/alerting-profile/CDlegacy-deletion-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDlegacy-deletion-service-E2E.CN-Prod: +- name: CD_legacy-deletion-service E2E +- alertingProfile: CD_legacy-deletion-service/alerting-profile/CDlegacy-deletion-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDlegacy-deletion-service-INT: +- name: CD_legacy-deletion-service INT +- alertingProfile: CD_legacy-deletion-service/alerting-profile/CDlegacy-deletion-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDlegacy-deletion-service-INT.EMEA-PreProd: +- name: CD_legacy-deletion-service INT +- alertingProfile: CD_legacy-deletion-service/alerting-profile/CDlegacy-deletion-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDlegacy-deletion-service-INT.NA-PreProd: +- name: CD_legacy-deletion-service INT +- alertingProfile: CD_legacy-deletion-service/alerting-profile/CDlegacy-deletion-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDlegacy-deletion-service-INT.CN-PreProd: +- name: CD_legacy-deletion-service INT +- alertingProfile: CD_legacy-deletion-service/alerting-profile/CDlegacy-deletion-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-deletion-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_legacy-deletion-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-deletion-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-deletion-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_legacy-deletion-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-deletion-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-deletion-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_legacy-deletion-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..dbf681bb --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-deletion-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- legacy-deletion-service: default.json + +legacy-deletion-service: +- name: CD_legacy-deletion-service - +- mzName: CD_legacy-deletion-service/management-zone/CDlegacy-deletion-service.name +- mzId: CD_legacy-deletion-service/management-zone/CDlegacy-deletion-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-sar-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_legacy-sar-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..c7f78f8d --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-sar-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDlegacy-sar-service-PROD: default.json +- CDlegacy-sar-service-E2E: default.json +- CDlegacy-sar-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDlegacy-sar-service-PROD: +- name: CD_legacy-sar-service PROD +- tag: legacy-sar-service +- mzId: CD_legacy-sar-service/management-zone/CDlegacy-sar-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDlegacy-sar-service-PROD.EMEA-Prod: +- name: CD_legacy-sar-service PROD +- tag: legacy-sar-service +- mzId: CD_legacy-sar-service/management-zone/CDlegacy-sar-service.id +- env: PROD +- skipDeployment: "false" +CDlegacy-sar-service-PROD.NA-Prod: +- name: CD_legacy-sar-service PROD +- tag: legacy-sar-service +- mzId: CD_legacy-sar-service/management-zone/CDlegacy-sar-service.id +- env: PROD +- skipDeployment: "false" +CDlegacy-sar-service-PROD.CN-Prod: +- name: CD_legacy-sar-service PROD +- tag: legacy-sar-service +- mzId: CD_legacy-sar-service/management-zone/CDlegacy-sar-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDlegacy-sar-service-E2E: +- name: CD_legacy-sar-service E2E +- tag: legacy-sar-service +- mzId: CD_legacy-sar-service/management-zone/CDlegacy-sar-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDlegacy-sar-service-E2E.EMEA-Prod: +- name: CD_legacy-sar-service E2E +- tag: legacy-sar-service +- mzId: CD_legacy-sar-service/management-zone/CDlegacy-sar-service.id +- env: E2E +- skipDeployment: "false" +CDlegacy-sar-service-E2E.NA-Prod: +- name: CD_legacy-sar-service E2E +- tag: legacy-sar-service +- mzId: CD_legacy-sar-service/management-zone/CDlegacy-sar-service.id +- env: E2E +- skipDeployment: "false" +CDlegacy-sar-service-E2E.CN-Prod: +- name: CD_legacy-sar-service E2E +- tag: legacy-sar-service +- mzId: CD_legacy-sar-service/management-zone/CDlegacy-sar-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDlegacy-sar-service-INT: +- name: CD_legacy-sar-service INT +- tag: legacy-sar-service +- mzId: CD_legacy-sar-service/management-zone/CDlegacy-sar-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDlegacy-sar-service-INT.EMEA-PreProd: +- name: CD_legacy-sar-service INT +- tag: legacy-sar-service +- mzId: CD_legacy-sar-service/management-zone/CDlegacy-sar-service.id +- env: INT +- skipDeployment: "false" +CDlegacy-sar-service-INT.NA-PreProd: +- name: CD_legacy-sar-service INT +- tag: legacy-sar-service +- mzId: CD_legacy-sar-service/management-zone/CDlegacy-sar-service.id +- env: INT +- skipDeployment: "false" +CDlegacy-sar-service-INT.CN-PreProd: +- name: CD_legacy-sar-service INT +- tag: legacy-sar-service +- mzId: CD_legacy-sar-service/management-zone/CDlegacy-sar-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-sar-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_legacy-sar-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-sar-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-sar-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_legacy-sar-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-sar-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-sar-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_legacy-sar-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-sar-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-sar-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_legacy-sar-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-sar-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-sar-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_legacy-sar-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-sar-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-sar-service/dashboard/README.md b/BMW-Dynatrace-config/CD_legacy-sar-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-sar-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-sar-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_legacy-sar-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..f58e0333 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-sar-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDlegacy-sar-service-PROD-E2E: defaultPRODE2E.json +- CDlegacy-sar-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDlegacy-sar-service-PROD-E2E: +- name: CD_legacy-sar-service PROD +- mzName: CD_legacy-sar-service/management-zone/CDlegacy-sar-service.name +- mzId: CD_legacy-sar-service/management-zone/CDlegacy-sar-service.id +- skipDeployment: "true" +#Configuration +CDlegacy-sar-service-PROD-E2E.EMEA-Prod: +- name: CD_legacy-sar-service PROD +- mzName: CD_legacy-sar-service/management-zone/CDlegacy-sar-service.name +- mzId: CD_legacy-sar-service/management-zone/CDlegacy-sar-service.id +- tag: legacy-sar-service +- skipDeployment: "false" +CDlegacy-sar-service-PROD-E2E.NA-Prod: +- name: CD_legacy-sar-service PROD +- mzName: CD_legacy-sar-service/management-zone/CDlegacy-sar-service.name +- mzId: CD_legacy-sar-service/management-zone/CDlegacy-sar-service.id +- tag: legacy-sar-service +- skipDeployment: "false" +CDlegacy-sar-service-PROD-E2E.CN-Prod: +- name: CD_legacy-sar-service PROD +- mzName: CD_legacy-sar-service/management-zone/CDlegacy-sar-service.name +- mzId: CD_legacy-sar-service/management-zone/CDlegacy-sar-service.id +- tag: legacy-sar-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDlegacy-sar-service-INT-TEST: +- name: CD_legacy-sar-service INT-TEST +- mzName: CD_legacy-sar-service/management-zone/CDlegacy-sar-service.name +- mzId: CD_legacy-sar-service/management-zone/CDlegacy-sar-service.id +- tag: legacy-sar-service +- skipDeployment: "true" +#Configuration +CDlegacy-sar-service-INT-TEST.EMEA-PreProd: +- name: CD_legacy-sar-service INT-TEST +- mzName: CD_legacy-sar-service/management-zone/CDlegacy-sar-service.name +- mzId: CD_legacy-sar-service/management-zone/CDlegacy-sar-service.id +- tag: legacy-sar-service +- skipDeployment: "false" +CDlegacy-sar-service-INT-TEST.NA-PreProd: +- name: CD_legacy-sar-service INT-TEST +- mzName: CD_legacy-sar-service/management-zone/CDlegacy-sar-service.name +- mzId: CD_legacy-sar-service/management-zone/CDlegacy-sar-service.id +- env: INT +- skipDeployment: "false" +CDlegacy-sar-service-INT-TEST.CN-PreProd: +- name: CD_legacy-sar-service INT-TEST +- mzName: CD_legacy-sar-service/management-zone/CDlegacy-sar-service.name +- mzId: CD_legacy-sar-service/management-zone/CDlegacy-sar-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-sar-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_legacy-sar-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-sar-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-sar-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_legacy-sar-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-sar-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-sar-service/management-zone/README.md b/BMW-Dynatrace-config/CD_legacy-sar-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-sar-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_legacy-sar-service/management-zone/default.json b/BMW-Dynatrace-config/CD_legacy-sar-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-sar-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-sar-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_legacy-sar-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..52285c89 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-sar-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDlegacy-sar-service: default.json + +CDlegacy-sar-service: +- name: CD_legacy-sar-service +- tag: legacy-sar-service diff --git a/BMW-Dynatrace-config/CD_legacy-sar-service/notification/README.md b/BMW-Dynatrace-config/CD_legacy-sar-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-sar-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-sar-service/notification/email.json b/BMW-Dynatrace-config/CD_legacy-sar-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-sar-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-sar-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_legacy-sar-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-sar-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-sar-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_legacy-sar-service/notification/notification.yaml new file mode 100644 index 00000000..2a0c41bd --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-sar-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDlegacy-sar-service-PROD: msTeams.json +- CDlegacy-sar-service-E2E: msTeams.json +- CDlegacy-sar-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDlegacy-sar-service-PROD: +- name: CD_legacy-sar-service PROD +- alertingProfile: CD_legacy-sar-service/alerting-profile/CDlegacy-sar-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDlegacy-sar-service-PROD.EMEA-Prod: +- name: CD_legacy-sar-service PROD +- alertingProfile: CD_legacy-sar-service/alerting-profile/CDlegacy-sar-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDlegacy-sar-service-PROD.NA-Prod: +- name: CD_legacy-sar-service PROD +- alertingProfile: CD_legacy-sar-service/alerting-profile/CDlegacy-sar-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDlegacy-sar-service-PROD.CN-Prod: +- name: CD_legacy-sar-service PROD +- alertingProfile: CD_legacy-sar-service/alerting-profile/CDlegacy-sar-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDlegacy-sar-service-E2E: +- name: CD_legacy-sar-service E2E +- alertingProfile: CD_legacy-sar-service/alerting-profile/CDlegacy-sar-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDlegacy-sar-service-E2E.EMEA-Prod: +- name: CD_legacy-sar-service E2E +- alertingProfile: CD_legacy-sar-service/alerting-profile/CDlegacy-sar-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDlegacy-sar-service-E2E.NA-Prod: +- name: CD_legacy-sar-service E2E +- alertingProfile: CD_legacy-sar-service/alerting-profile/CDlegacy-sar-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDlegacy-sar-service-E2E.CN-Prod: +- name: CD_legacy-sar-service E2E +- alertingProfile: CD_legacy-sar-service/alerting-profile/CDlegacy-sar-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDlegacy-sar-service-INT: +- name: CD_legacy-sar-service INT +- alertingProfile: CD_legacy-sar-service/alerting-profile/CDlegacy-sar-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDlegacy-sar-service-INT.EMEA-PreProd: +- name: CD_legacy-sar-service INT +- alertingProfile: CD_legacy-sar-service/alerting-profile/CDlegacy-sar-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDlegacy-sar-service-INT.NA-PreProd: +- name: CD_legacy-sar-service INT +- alertingProfile: CD_legacy-sar-service/alerting-profile/CDlegacy-sar-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDlegacy-sar-service-INT.CN-PreProd: +- name: CD_legacy-sar-service INT +- alertingProfile: CD_legacy-sar-service/alerting-profile/CDlegacy-sar-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-sar-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_legacy-sar-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-sar-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-sar-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_legacy-sar-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-sar-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-sar-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_legacy-sar-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..d83dc77a --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-sar-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- legacy-sar-service: default.json + +legacy-sar-service: +- name: CD_legacy-sar-service - +- mzName: CD_legacy-sar-service/management-zone/CDlegacy-sar-service.name +- mzId: CD_legacy-sar-service/management-zone/CDlegacy-sar-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legal-document-composite-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_legal-document-composite-service/alerting-profile/alerting-profile.yaml index 3ea4243d..d608fccb 100644 --- a/BMW-Dynatrace-config/CD_legal-document-composite-service/alerting-profile/alerting-profile.yaml +++ b/BMW-Dynatrace-config/CD_legal-document-composite-service/alerting-profile/alerting-profile.yaml @@ -1,6 +1,88 @@ -CDlegal-document-composite-service: -- name: CD_legal-document-composite-service/management-zone/CDlegal-document-composite-service.name +config: +- CDlegal-document-composite-service-PROD: default.json +- CDlegal-document-composite-service-E2E: default.json +- CDlegal-document-composite-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDlegal-document-composite-service-PROD: +- name: CD_legal-document-composite-service PROD - tag: legal-document-composite-service - mzId: CD_legal-document-composite-service/management-zone/CDlegal-document-composite-service.id -config: -- CDlegal-document-composite-service: legal-document-composite-service.json +- env: PROD +- skipDeployment: "true" +#Configuration +CDlegal-document-composite-service-PROD.EMEA-Prod: +- name: CD_legal-document-composite-service PROD +- tag: legal-document-composite-service +- mzId: CD_legal-document-composite-service/management-zone/CDlegal-document-composite-service.id +- env: PROD +- skipDeployment: "false" +CDlegal-document-composite-service-PROD.NA-Prod: +- name: CD_legal-document-composite-service PROD +- tag: legal-document-composite-service +- mzId: CD_legal-document-composite-service/management-zone/CDlegal-document-composite-service.id +- env: PROD +- skipDeployment: "false" +CDlegal-document-composite-service-PROD.CN-Prod: +- name: CD_legal-document-composite-service PROD +- tag: legal-document-composite-service +- mzId: CD_legal-document-composite-service/management-zone/CDlegal-document-composite-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDlegal-document-composite-service-E2E: +- name: CD_legal-document-composite-service E2E +- tag: legal-document-composite-service +- mzId: CD_legal-document-composite-service/management-zone/CDlegal-document-composite-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDlegal-document-composite-service-E2E.EMEA-Prod: +- name: CD_legal-document-composite-service E2E +- tag: legal-document-composite-service +- mzId: CD_legal-document-composite-service/management-zone/CDlegal-document-composite-service.id +- env: E2E +- skipDeployment: "false" +CDlegal-document-composite-service-E2E.NA-Prod: +- name: CD_legal-document-composite-service E2E +- tag: legal-document-composite-service +- mzId: CD_legal-document-composite-service/management-zone/CDlegal-document-composite-service.id +- env: E2E +- skipDeployment: "false" +CDlegal-document-composite-service-E2E.CN-Prod: +- name: CD_legal-document-composite-service E2E +- tag: legal-document-composite-service +- mzId: CD_legal-document-composite-service/management-zone/CDlegal-document-composite-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDlegal-document-composite-service-INT: +- name: CD_legal-document-composite-service INT +- tag: legal-document-composite-service +- mzId: CD_legal-document-composite-service/management-zone/CDlegal-document-composite-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDlegal-document-composite-service-INT.EMEA-PreProd: +- name: CD_legal-document-composite-service INT +- tag: legal-document-composite-service +- mzId: CD_legal-document-composite-service/management-zone/CDlegal-document-composite-service.id +- env: INT +- skipDeployment: "false" +CDlegal-document-composite-service-INT.NA-PreProd: +- name: CD_legal-document-composite-service INT +- tag: legal-document-composite-service +- mzId: CD_legal-document-composite-service/management-zone/CDlegal-document-composite-service.id +- env: INT +- skipDeployment: "false" +CDlegal-document-composite-service-INT.CN-PreProd: +- name: CD_legal-document-composite-service INT +- tag: legal-document-composite-service +- mzId: CD_legal-document-composite-service/management-zone/CDlegal-document-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legal-document-composite-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_legal-document-composite-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legal-document-composite-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legal-document-composite-service/alerting-profile/legal-document-composite-service.json b/BMW-Dynatrace-config/CD_legal-document-composite-service/alerting-profile/legal-document-composite-service.json deleted file mode 100644 index d10ad44a..00000000 --- a/BMW-Dynatrace-config/CD_legal-document-composite-service/alerting-profile/legal-document-composite-service.json +++ /dev/null @@ -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}}" - } - ] - } - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legal-document-composite-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_legal-document-composite-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_legal-document-composite-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legal-document-composite-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_legal-document-composite-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legal-document-composite-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legal-document-composite-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_legal-document-composite-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legal-document-composite-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legal-document-composite-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_legal-document-composite-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legal-document-composite-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legal-document-composite-service/dashboard/README.md b/BMW-Dynatrace-config/CD_legal-document-composite-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_legal-document-composite-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legal-document-composite-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_legal-document-composite-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..564c42b4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legal-document-composite-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDlegal-document-composite-service-PROD-E2E: defaultPRODE2E.json +- CDlegal-document-composite-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDlegal-document-composite-service-PROD-E2E: +- name: CD_legal-document-composite-service PROD +- mzName: CD_legal-document-composite-service/management-zone/CDlegal-document-composite-service.name +- mzId: CD_legal-document-composite-service/management-zone/CDlegal-document-composite-service.id +- skipDeployment: "true" +#Configuration +CDlegal-document-composite-service-PROD-E2E.EMEA-Prod: +- name: CD_legal-document-composite-service PROD +- mzName: CD_legal-document-composite-service/management-zone/CDlegal-document-composite-service.name +- mzId: CD_legal-document-composite-service/management-zone/CDlegal-document-composite-service.id +- tag: legal-document-composite-service +- skipDeployment: "false" +CDlegal-document-composite-service-PROD-E2E.NA-Prod: +- name: CD_legal-document-composite-service PROD +- mzName: CD_legal-document-composite-service/management-zone/CDlegal-document-composite-service.name +- mzId: CD_legal-document-composite-service/management-zone/CDlegal-document-composite-service.id +- tag: legal-document-composite-service +- skipDeployment: "false" +CDlegal-document-composite-service-PROD-E2E.CN-Prod: +- name: CD_legal-document-composite-service PROD +- mzName: CD_legal-document-composite-service/management-zone/CDlegal-document-composite-service.name +- mzId: CD_legal-document-composite-service/management-zone/CDlegal-document-composite-service.id +- tag: legal-document-composite-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDlegal-document-composite-service-INT-TEST: +- name: CD_legal-document-composite-service INT-TEST +- mzName: CD_legal-document-composite-service/management-zone/CDlegal-document-composite-service.name +- mzId: CD_legal-document-composite-service/management-zone/CDlegal-document-composite-service.id +- tag: legal-document-composite-service +- skipDeployment: "true" +#Configuration +CDlegal-document-composite-service-INT-TEST.EMEA-PreProd: +- name: CD_legal-document-composite-service INT-TEST +- mzName: CD_legal-document-composite-service/management-zone/CDlegal-document-composite-service.name +- mzId: CD_legal-document-composite-service/management-zone/CDlegal-document-composite-service.id +- tag: legal-document-composite-service +- skipDeployment: "false" +CDlegal-document-composite-service-INT-TEST.NA-PreProd: +- name: CD_legal-document-composite-service INT-TEST +- mzName: CD_legal-document-composite-service/management-zone/CDlegal-document-composite-service.name +- mzId: CD_legal-document-composite-service/management-zone/CDlegal-document-composite-service.id +- env: INT +- skipDeployment: "false" +CDlegal-document-composite-service-INT-TEST.CN-PreProd: +- name: CD_legal-document-composite-service INT-TEST +- mzName: CD_legal-document-composite-service/management-zone/CDlegal-document-composite-service.name +- mzId: CD_legal-document-composite-service/management-zone/CDlegal-document-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legal-document-composite-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_legal-document-composite-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legal-document-composite-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legal-document-composite-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_legal-document-composite-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_legal-document-composite-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legal-document-composite-service/management-zone/CDlegal-document-composite-service.json b/BMW-Dynatrace-config/CD_legal-document-composite-service/management-zone/CDlegal-document-composite-service.json deleted file mode 100644 index b2a9367b..00000000 --- a/BMW-Dynatrace-config/CD_legal-document-composite-service/management-zone/CDlegal-document-composite-service.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "dimensionalRules": [], - "name": "{{.name}}", - "rules": [ - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "{{.tag}}" - } - }, - "key": { - "attribute": "SERVICE_TAGS" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "HealthResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PingResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PrometheusResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - } - ], - "enabled": true, - "propagationTypes": [ - "SERVICE_TO_PROCESS_GROUP_LIKE", - "SERVICE_TO_HOST_LIKE" - ], - "type": "SERVICE" - }, - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "{{.tag}}" - } - }, - "key": { - "attribute": "PROCESS_GROUP_TAGS" - } - } - ], - "enabled": true, - "propagationTypes": [ - "PROCESS_GROUP_TO_HOST" - ], - "type": "PROCESS_GROUP" - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legal-document-composite-service/management-zone/README.md b/BMW-Dynatrace-config/CD_legal-document-composite-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legal-document-composite-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_legal-document-composite-service/management-zone/default.json b/BMW-Dynatrace-config/CD_legal-document-composite-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_legal-document-composite-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legal-document-composite-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_legal-document-composite-service/management-zone/management-zone.yaml index 145f4f4a..2e892391 100644 --- a/BMW-Dynatrace-config/CD_legal-document-composite-service/management-zone/management-zone.yaml +++ b/BMW-Dynatrace-config/CD_legal-document-composite-service/management-zone/management-zone.yaml @@ -1,20 +1,6 @@ -CDlegal-document-composite-service.CN-PreProd: -- name: CD_legal-document-composite-service -- tag: legal-document-composite-service -CDlegal-document-composite-service.CN-Prod: -- name: CD_legal-document-composite-service -- tag: legal-document-composite-service -CDlegal-document-composite-service.EMEA-PreProd: -- name: CD_legal-document-composite-service -- tag: legal-document-composite-service -CDlegal-document-composite-service.EMEA-Prod: -- name: CD_legal-document-composite-service -- tag: legal-document-composite-service -CDlegal-document-composite-service.NA-PreProd: -- name: CD_legal-document-composite-service -- tag: legal-document-composite-service -CDlegal-document-composite-service.NA-Prod: -- name: CD_legal-document-composite-service -- tag: legal-document-composite-service config: -- CDlegal-document-composite-service: CDlegal-document-composite-service.json +- CDlegal-document-composite-service: default.json + +CDlegal-document-composite-service: +- name: CD_legal-document-composite-service +- tag: legal-document-composite-service diff --git a/BMW-Dynatrace-config/CD_legal-document-composite-service/notification/README.md b/BMW-Dynatrace-config/CD_legal-document-composite-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legal-document-composite-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legal-document-composite-service/notification/email.json b/BMW-Dynatrace-config/CD_legal-document-composite-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legal-document-composite-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legal-document-composite-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_legal-document-composite-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legal-document-composite-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legal-document-composite-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_legal-document-composite-service/notification/notification.yaml new file mode 100644 index 00000000..10f04f2c --- /dev/null +++ b/BMW-Dynatrace-config/CD_legal-document-composite-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDlegal-document-composite-service-PROD: msTeams.json +- CDlegal-document-composite-service-E2E: msTeams.json +- CDlegal-document-composite-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDlegal-document-composite-service-PROD: +- name: CD_legal-document-composite-service PROD +- alertingProfile: CD_legal-document-composite-service/alerting-profile/CDlegal-document-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDlegal-document-composite-service-PROD.EMEA-Prod: +- name: CD_legal-document-composite-service PROD +- alertingProfile: CD_legal-document-composite-service/alerting-profile/CDlegal-document-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDlegal-document-composite-service-PROD.NA-Prod: +- name: CD_legal-document-composite-service PROD +- alertingProfile: CD_legal-document-composite-service/alerting-profile/CDlegal-document-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDlegal-document-composite-service-PROD.CN-Prod: +- name: CD_legal-document-composite-service PROD +- alertingProfile: CD_legal-document-composite-service/alerting-profile/CDlegal-document-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDlegal-document-composite-service-E2E: +- name: CD_legal-document-composite-service E2E +- alertingProfile: CD_legal-document-composite-service/alerting-profile/CDlegal-document-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDlegal-document-composite-service-E2E.EMEA-Prod: +- name: CD_legal-document-composite-service E2E +- alertingProfile: CD_legal-document-composite-service/alerting-profile/CDlegal-document-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDlegal-document-composite-service-E2E.NA-Prod: +- name: CD_legal-document-composite-service E2E +- alertingProfile: CD_legal-document-composite-service/alerting-profile/CDlegal-document-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDlegal-document-composite-service-E2E.CN-Prod: +- name: CD_legal-document-composite-service E2E +- alertingProfile: CD_legal-document-composite-service/alerting-profile/CDlegal-document-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDlegal-document-composite-service-INT: +- name: CD_legal-document-composite-service INT +- alertingProfile: CD_legal-document-composite-service/alerting-profile/CDlegal-document-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDlegal-document-composite-service-INT.EMEA-PreProd: +- name: CD_legal-document-composite-service INT +- alertingProfile: CD_legal-document-composite-service/alerting-profile/CDlegal-document-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDlegal-document-composite-service-INT.NA-PreProd: +- name: CD_legal-document-composite-service INT +- alertingProfile: CD_legal-document-composite-service/alerting-profile/CDlegal-document-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDlegal-document-composite-service-INT.CN-PreProd: +- name: CD_legal-document-composite-service INT +- alertingProfile: CD_legal-document-composite-service/alerting-profile/CDlegal-document-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legal-document-composite-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_legal-document-composite-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_legal-document-composite-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legal-document-composite-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_legal-document-composite-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_legal-document-composite-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legal-document-composite-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_legal-document-composite-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..b1aada88 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legal-document-composite-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- legal-document-composite-service: default.json + +legal-document-composite-service: +- name: CD_legal-document-composite-service - +- mzName: CD_legal-document-composite-service/management-zone/CDlegal-document-composite-service.name +- mzId: CD_legal-document-composite-service/management-zone/CDlegal-document-composite-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_log-data-deletion-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_log-data-deletion-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..a650ee42 --- /dev/null +++ b/BMW-Dynatrace-config/CD_log-data-deletion-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDlog-data-deletion-service-PROD: default.json +- CDlog-data-deletion-service-E2E: default.json +- CDlog-data-deletion-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDlog-data-deletion-service-PROD: +- name: CD_log-data-deletion-service PROD +- tag: log-data-deletion-service +- mzId: CD_log-data-deletion-service/management-zone/CDlog-data-deletion-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDlog-data-deletion-service-PROD.EMEA-Prod: +- name: CD_log-data-deletion-service PROD +- tag: log-data-deletion-service +- mzId: CD_log-data-deletion-service/management-zone/CDlog-data-deletion-service.id +- env: PROD +- skipDeployment: "false" +CDlog-data-deletion-service-PROD.NA-Prod: +- name: CD_log-data-deletion-service PROD +- tag: log-data-deletion-service +- mzId: CD_log-data-deletion-service/management-zone/CDlog-data-deletion-service.id +- env: PROD +- skipDeployment: "false" +CDlog-data-deletion-service-PROD.CN-Prod: +- name: CD_log-data-deletion-service PROD +- tag: log-data-deletion-service +- mzId: CD_log-data-deletion-service/management-zone/CDlog-data-deletion-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDlog-data-deletion-service-E2E: +- name: CD_log-data-deletion-service E2E +- tag: log-data-deletion-service +- mzId: CD_log-data-deletion-service/management-zone/CDlog-data-deletion-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDlog-data-deletion-service-E2E.EMEA-Prod: +- name: CD_log-data-deletion-service E2E +- tag: log-data-deletion-service +- mzId: CD_log-data-deletion-service/management-zone/CDlog-data-deletion-service.id +- env: E2E +- skipDeployment: "false" +CDlog-data-deletion-service-E2E.NA-Prod: +- name: CD_log-data-deletion-service E2E +- tag: log-data-deletion-service +- mzId: CD_log-data-deletion-service/management-zone/CDlog-data-deletion-service.id +- env: E2E +- skipDeployment: "false" +CDlog-data-deletion-service-E2E.CN-Prod: +- name: CD_log-data-deletion-service E2E +- tag: log-data-deletion-service +- mzId: CD_log-data-deletion-service/management-zone/CDlog-data-deletion-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDlog-data-deletion-service-INT: +- name: CD_log-data-deletion-service INT +- tag: log-data-deletion-service +- mzId: CD_log-data-deletion-service/management-zone/CDlog-data-deletion-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDlog-data-deletion-service-INT.EMEA-PreProd: +- name: CD_log-data-deletion-service INT +- tag: log-data-deletion-service +- mzId: CD_log-data-deletion-service/management-zone/CDlog-data-deletion-service.id +- env: INT +- skipDeployment: "false" +CDlog-data-deletion-service-INT.NA-PreProd: +- name: CD_log-data-deletion-service INT +- tag: log-data-deletion-service +- mzId: CD_log-data-deletion-service/management-zone/CDlog-data-deletion-service.id +- env: INT +- skipDeployment: "false" +CDlog-data-deletion-service-INT.CN-PreProd: +- name: CD_log-data-deletion-service INT +- tag: log-data-deletion-service +- mzId: CD_log-data-deletion-service/management-zone/CDlog-data-deletion-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_log-data-deletion-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_log-data-deletion-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_log-data-deletion-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_log-data-deletion-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_log-data-deletion-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_log-data-deletion-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_log-data-deletion-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_log-data-deletion-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_log-data-deletion-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_log-data-deletion-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_log-data-deletion-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_log-data-deletion-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_log-data-deletion-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_log-data-deletion-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_log-data-deletion-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_log-data-deletion-service/dashboard/README.md b/BMW-Dynatrace-config/CD_log-data-deletion-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_log-data-deletion-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_log-data-deletion-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_log-data-deletion-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..eec6a5e4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_log-data-deletion-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDlog-data-deletion-service-PROD-E2E: defaultPRODE2E.json +- CDlog-data-deletion-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDlog-data-deletion-service-PROD-E2E: +- name: CD_log-data-deletion-service PROD +- mzName: CD_log-data-deletion-service/management-zone/CDlog-data-deletion-service.name +- mzId: CD_log-data-deletion-service/management-zone/CDlog-data-deletion-service.id +- skipDeployment: "true" +#Configuration +CDlog-data-deletion-service-PROD-E2E.EMEA-Prod: +- name: CD_log-data-deletion-service PROD +- mzName: CD_log-data-deletion-service/management-zone/CDlog-data-deletion-service.name +- mzId: CD_log-data-deletion-service/management-zone/CDlog-data-deletion-service.id +- tag: log-data-deletion-service +- skipDeployment: "false" +CDlog-data-deletion-service-PROD-E2E.NA-Prod: +- name: CD_log-data-deletion-service PROD +- mzName: CD_log-data-deletion-service/management-zone/CDlog-data-deletion-service.name +- mzId: CD_log-data-deletion-service/management-zone/CDlog-data-deletion-service.id +- tag: log-data-deletion-service +- skipDeployment: "false" +CDlog-data-deletion-service-PROD-E2E.CN-Prod: +- name: CD_log-data-deletion-service PROD +- mzName: CD_log-data-deletion-service/management-zone/CDlog-data-deletion-service.name +- mzId: CD_log-data-deletion-service/management-zone/CDlog-data-deletion-service.id +- tag: log-data-deletion-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDlog-data-deletion-service-INT-TEST: +- name: CD_log-data-deletion-service INT-TEST +- mzName: CD_log-data-deletion-service/management-zone/CDlog-data-deletion-service.name +- mzId: CD_log-data-deletion-service/management-zone/CDlog-data-deletion-service.id +- tag: log-data-deletion-service +- skipDeployment: "true" +#Configuration +CDlog-data-deletion-service-INT-TEST.EMEA-PreProd: +- name: CD_log-data-deletion-service INT-TEST +- mzName: CD_log-data-deletion-service/management-zone/CDlog-data-deletion-service.name +- mzId: CD_log-data-deletion-service/management-zone/CDlog-data-deletion-service.id +- tag: log-data-deletion-service +- skipDeployment: "false" +CDlog-data-deletion-service-INT-TEST.NA-PreProd: +- name: CD_log-data-deletion-service INT-TEST +- mzName: CD_log-data-deletion-service/management-zone/CDlog-data-deletion-service.name +- mzId: CD_log-data-deletion-service/management-zone/CDlog-data-deletion-service.id +- env: INT +- skipDeployment: "false" +CDlog-data-deletion-service-INT-TEST.CN-PreProd: +- name: CD_log-data-deletion-service INT-TEST +- mzName: CD_log-data-deletion-service/management-zone/CDlog-data-deletion-service.name +- mzId: CD_log-data-deletion-service/management-zone/CDlog-data-deletion-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_log-data-deletion-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_log-data-deletion-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_log-data-deletion-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_log-data-deletion-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_log-data-deletion-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_log-data-deletion-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_log-data-deletion-service/management-zone/README.md b/BMW-Dynatrace-config/CD_log-data-deletion-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_log-data-deletion-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_log-data-deletion-service/management-zone/default.json b/BMW-Dynatrace-config/CD_log-data-deletion-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_log-data-deletion-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_log-data-deletion-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_log-data-deletion-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..7a324d6e --- /dev/null +++ b/BMW-Dynatrace-config/CD_log-data-deletion-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDlog-data-deletion-service: default.json + +CDlog-data-deletion-service: +- name: CD_log-data-deletion-service +- tag: log-data-deletion-service diff --git a/BMW-Dynatrace-config/CD_log-data-deletion-service/notification/README.md b/BMW-Dynatrace-config/CD_log-data-deletion-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_log-data-deletion-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_log-data-deletion-service/notification/email.json b/BMW-Dynatrace-config/CD_log-data-deletion-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_log-data-deletion-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_log-data-deletion-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_log-data-deletion-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_log-data-deletion-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_log-data-deletion-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_log-data-deletion-service/notification/notification.yaml new file mode 100644 index 00000000..f24634e3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_log-data-deletion-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDlog-data-deletion-service-PROD: msTeams.json +- CDlog-data-deletion-service-E2E: msTeams.json +- CDlog-data-deletion-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDlog-data-deletion-service-PROD: +- name: CD_log-data-deletion-service PROD +- alertingProfile: CD_log-data-deletion-service/alerting-profile/CDlog-data-deletion-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDlog-data-deletion-service-PROD.EMEA-Prod: +- name: CD_log-data-deletion-service PROD +- alertingProfile: CD_log-data-deletion-service/alerting-profile/CDlog-data-deletion-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDlog-data-deletion-service-PROD.NA-Prod: +- name: CD_log-data-deletion-service PROD +- alertingProfile: CD_log-data-deletion-service/alerting-profile/CDlog-data-deletion-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDlog-data-deletion-service-PROD.CN-Prod: +- name: CD_log-data-deletion-service PROD +- alertingProfile: CD_log-data-deletion-service/alerting-profile/CDlog-data-deletion-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDlog-data-deletion-service-E2E: +- name: CD_log-data-deletion-service E2E +- alertingProfile: CD_log-data-deletion-service/alerting-profile/CDlog-data-deletion-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDlog-data-deletion-service-E2E.EMEA-Prod: +- name: CD_log-data-deletion-service E2E +- alertingProfile: CD_log-data-deletion-service/alerting-profile/CDlog-data-deletion-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDlog-data-deletion-service-E2E.NA-Prod: +- name: CD_log-data-deletion-service E2E +- alertingProfile: CD_log-data-deletion-service/alerting-profile/CDlog-data-deletion-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDlog-data-deletion-service-E2E.CN-Prod: +- name: CD_log-data-deletion-service E2E +- alertingProfile: CD_log-data-deletion-service/alerting-profile/CDlog-data-deletion-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDlog-data-deletion-service-INT: +- name: CD_log-data-deletion-service INT +- alertingProfile: CD_log-data-deletion-service/alerting-profile/CDlog-data-deletion-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDlog-data-deletion-service-INT.EMEA-PreProd: +- name: CD_log-data-deletion-service INT +- alertingProfile: CD_log-data-deletion-service/alerting-profile/CDlog-data-deletion-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDlog-data-deletion-service-INT.NA-PreProd: +- name: CD_log-data-deletion-service INT +- alertingProfile: CD_log-data-deletion-service/alerting-profile/CDlog-data-deletion-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDlog-data-deletion-service-INT.CN-PreProd: +- name: CD_log-data-deletion-service INT +- alertingProfile: CD_log-data-deletion-service/alerting-profile/CDlog-data-deletion-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_log-data-deletion-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_log-data-deletion-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_log-data-deletion-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_log-data-deletion-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_log-data-deletion-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_log-data-deletion-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_log-data-deletion-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_log-data-deletion-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..48fcdec4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_log-data-deletion-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- log-data-deletion-service: default.json + +log-data-deletion-service: +- name: CD_log-data-deletion-service - +- mzName: CD_log-data-deletion-service/management-zone/CDlog-data-deletion-service.name +- mzId: CD_log-data-deletion-service/management-zone/CDlog-data-deletion-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-kc/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_lsc-kc/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..8bd59122 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-kc/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDlsc-kc-PROD: default.json +- CDlsc-kc-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDlsc-kc-PROD: +- name: CD_lsc-kc PROD +- tag: lsc-kc +- mzId: CD_lsc-kc/management-zone/CDlsc-kc.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDlsc-kc-PROD.EMEA-Prod: +- name: CD_lsc-kc PROD +- tag: lsc-kc +- mzId: CD_lsc-kc/management-zone/CDlsc-kc.id +- env: PROD +- skipDeployment: "false" +CDlsc-kc-PROD.NA-Prod: +- name: CD_lsc-kc PROD +- tag: lsc-kc +- mzId: CD_lsc-kc/management-zone/CDlsc-kc.id +- env: PROD +- skipDeployment: "false" +CDlsc-kc-PROD.CN-Prod: +- name: CD_lsc-kc PROD +- tag: lsc-kc +- mzId: CD_lsc-kc/management-zone/CDlsc-kc.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDlsc-kc-INT: +- name: CD_lsc-kc INT +- tag: lsc-kc +- mzId: CD_lsc-kc/management-zone/CDlsc-kc.id +- env: INT +- skipDeployment: "true" +#Configuration +CDlsc-kc-INT.EMEA-PreProd: +- name: CD_lsc-kc INT +- tag: lsc-kc +- mzId: CD_lsc-kc/management-zone/CDlsc-kc.id +- env: INT +- skipDeployment: "false" +CDlsc-kc-INT.NA-PreProd: +- name: CD_lsc-kc INT +- tag: lsc-kc +- mzId: CD_lsc-kc/management-zone/CDlsc-kc.id +- env: INT +- skipDeployment: "false" +CDlsc-kc-INT.CN-PreProd: +- name: CD_lsc-kc INT +- tag: lsc-kc +- mzId: CD_lsc-kc/management-zone/CDlsc-kc.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-kc/alerting-profile/default.json b/BMW-Dynatrace-config/CD_lsc-kc/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-kc/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-kc/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_lsc-kc/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-kc/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-kc/custom-service-java/README.md b/BMW-Dynatrace-config/CD_lsc-kc/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-kc/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-kc/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_lsc-kc/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-kc/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-kc/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_lsc-kc/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-kc/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-kc/dashboard/README.md b/BMW-Dynatrace-config/CD_lsc-kc/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-kc/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-kc/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_lsc-kc/dashboard/dashboard.yaml new file mode 100644 index 00000000..f547b82a --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-kc/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDlsc-kc-PROD-E2E: defaultPRODE2E.json +- CDlsc-kc-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDlsc-kc-PROD-E2E: +- name: CD_lsc-kc PROD-E2E +- mzName: CD_lsc-kc/management-zone/CDlsc-kc.name +- mzId: CD_lsc-kc/management-zone/CDlsc-kc.id +- skipDeployment: "true" +#Configuration +CDlsc-kc-PROD-E2E.EMEA-Prod: +- name: CD_lsc-kc PROD-E2E +- mzName: CD_lsc-kc/management-zone/CDlsc-kc.name +- mzId: CD_lsc-kc/management-zone/CDlsc-kc.id +- tag: lsc-kc +- skipDeployment: "false" +CDlsc-kc-PROD-E2E.NA-Prod: +- name: CD_lsc-kc PROD-E2E +- mzName: CD_lsc-kc/management-zone/CDlsc-kc.name +- mzId: CD_lsc-kc/management-zone/CDlsc-kc.id +- tag: lsc-kc +- skipDeployment: "false" +CDlsc-kc-PROD-E2E.CN-Prod: +- name: CD_lsc-kc PROD-E2E +- mzName: CD_lsc-kc/management-zone/CDlsc-kc.name +- mzId: CD_lsc-kc/management-zone/CDlsc-kc.id +- tag: lsc-kc +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDlsc-kc-INT-TEST: +- name: CD_lsc-kc INT-TEST +- mzName: CD_lsc-kc/management-zone/CDlsc-kc.name +- mzId: CD_lsc-kc/management-zone/CDlsc-kc.id +- tag: lsc-kc +- skipDeployment: "true" +#Configuration +CDlsc-kc-INT-TEST.EMEA-PreProd: +- name: CD_lsc-kc INT-TEST +- mzName: CD_lsc-kc/management-zone/CDlsc-kc.name +- mzId: CD_lsc-kc/management-zone/CDlsc-kc.id +- tag: lsc-kc +- skipDeployment: "false" +CDlsc-kc-INT-TEST.NA-PreProd: +- name: CD_lsc-kc INT-TEST +- mzName: CD_lsc-kc/management-zone/CDlsc-kc.name +- mzId: CD_lsc-kc/management-zone/CDlsc-kc.id +- env: INT +- skipDeployment: "false" +CDlsc-kc-INT-TEST.CN-PreProd: +- name: CD_lsc-kc INT-TEST +- mzName: CD_lsc-kc/management-zone/CDlsc-kc.name +- mzId: CD_lsc-kc/management-zone/CDlsc-kc.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-kc/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_lsc-kc/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-kc/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-kc/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_lsc-kc/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-kc/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-kc/management-zone/README.md b/BMW-Dynatrace-config/CD_lsc-kc/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-kc/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_lsc-kc/management-zone/default.json b/BMW-Dynatrace-config/CD_lsc-kc/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-kc/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-kc/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_lsc-kc/management-zone/management-zone.yaml new file mode 100644 index 00000000..d34538ad --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-kc/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDlsc-kc: default.json + +CDlsc-kc: +- name: CD_lsc-kc +- tag: lsc-kc diff --git a/BMW-Dynatrace-config/CD_lsc-kc/notification/README.md b/BMW-Dynatrace-config/CD_lsc-kc/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-kc/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-kc/notification/email.json b/BMW-Dynatrace-config/CD_lsc-kc/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-kc/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-kc/notification/msTeams.json b/BMW-Dynatrace-config/CD_lsc-kc/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-kc/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-kc/notification/notification.yaml b/BMW-Dynatrace-config/CD_lsc-kc/notification/notification.yaml new file mode 100644 index 00000000..317513d0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-kc/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDlsc-kc-PROD: msTeams.json +- CDlsc-kc-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDlsc-kc-PROD: +- name: CD_lsc-kc PROD +- alertingProfile: CD_lsc-kc/alerting-profile/CDlsc-kc-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDlsc-kc-PROD.EMEA-Prod: +- name: CD_lsc-kc PROD +- alertingProfile: CD_lsc-kc/alerting-profile/CDlsc-kc-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDlsc-kc-PROD.NA-Prod: +- name: CD_lsc-kc PROD +- alertingProfile: CD_lsc-kc/alerting-profile/CDlsc-kc-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDlsc-kc-PROD.CN-Prod: +- name: CD_lsc-kc PROD +- alertingProfile: CD_lsc-kc/alerting-profile/CDlsc-kc-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDlsc-kc-INT: +- name: CD_lsc-kc INT +- alertingProfile: CD_lsc-kc/alerting-profile/CDlsc-kc-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDlsc-kc-INT.EMEA-PreProd: +- name: CD_lsc-kc INT +- alertingProfile: CD_lsc-kc/alerting-profile/CDlsc-kc-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDlsc-kc-INT.NA-PreProd: +- name: CD_lsc-kc INT +- alertingProfile: CD_lsc-kc/alerting-profile/CDlsc-kc-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDlsc-kc-INT.CN-PreProd: +- name: CD_lsc-kc INT +- alertingProfile: CD_lsc-kc/alerting-profile/CDlsc-kc-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-kc/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_lsc-kc/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-kc/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-kc/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_lsc-kc/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-kc/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-kc/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_lsc-kc/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..331e9394 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-kc/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- lsc-kc: default.json + +lsc-kc: +- name: CD_lsc-kc - +- mzName: CD_lsc-kc/management-zone/CDlsc-kc.name +- mzId: CD_lsc-kc/management-zone/CDlsc-kc.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-mm/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_lsc-mm/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..6b1ab7aa --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-mm/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDlsc-mm-PROD: default.json +- CDlsc-mm-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDlsc-mm-PROD: +- name: CD_lsc-mm PROD +- tag: lsc-mm +- mzId: CD_lsc-mm/management-zone/CDlsc-mm.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDlsc-mm-PROD.EMEA-Prod: +- name: CD_lsc-mm PROD +- tag: lsc-mm +- mzId: CD_lsc-mm/management-zone/CDlsc-mm.id +- env: PROD +- skipDeployment: "false" +CDlsc-mm-PROD.NA-Prod: +- name: CD_lsc-mm PROD +- tag: lsc-mm +- mzId: CD_lsc-mm/management-zone/CDlsc-mm.id +- env: PROD +- skipDeployment: "false" +CDlsc-mm-PROD.CN-Prod: +- name: CD_lsc-mm PROD +- tag: lsc-mm +- mzId: CD_lsc-mm/management-zone/CDlsc-mm.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDlsc-mm-INT: +- name: CD_lsc-mm INT +- tag: lsc-mm +- mzId: CD_lsc-mm/management-zone/CDlsc-mm.id +- env: INT +- skipDeployment: "true" +#Configuration +CDlsc-mm-INT.EMEA-PreProd: +- name: CD_lsc-mm INT +- tag: lsc-mm +- mzId: CD_lsc-mm/management-zone/CDlsc-mm.id +- env: INT +- skipDeployment: "false" +CDlsc-mm-INT.NA-PreProd: +- name: CD_lsc-mm INT +- tag: lsc-mm +- mzId: CD_lsc-mm/management-zone/CDlsc-mm.id +- env: INT +- skipDeployment: "false" +CDlsc-mm-INT.CN-PreProd: +- name: CD_lsc-mm INT +- tag: lsc-mm +- mzId: CD_lsc-mm/management-zone/CDlsc-mm.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-mm/alerting-profile/default.json b/BMW-Dynatrace-config/CD_lsc-mm/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-mm/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-mm/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_lsc-mm/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-mm/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-mm/custom-service-java/README.md b/BMW-Dynatrace-config/CD_lsc-mm/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-mm/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-mm/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_lsc-mm/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-mm/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-mm/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_lsc-mm/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-mm/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-mm/dashboard/README.md b/BMW-Dynatrace-config/CD_lsc-mm/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-mm/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-mm/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_lsc-mm/dashboard/dashboard.yaml new file mode 100644 index 00000000..6ad80537 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-mm/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDlsc-mm-PROD-E2E: defaultPRODE2E.json +- CDlsc-mm-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDlsc-mm-PROD-E2E: +- name: CD_lsc-mm PROD-E2E +- mzName: CD_lsc-mm/management-zone/CDlsc-mm.name +- mzId: CD_lsc-mm/management-zone/CDlsc-mm.id +- skipDeployment: "true" +#Configuration +CDlsc-mm-PROD-E2E.EMEA-Prod: +- name: CD_lsc-mm PROD-E2E +- mzName: CD_lsc-mm/management-zone/CDlsc-mm.name +- mzId: CD_lsc-mm/management-zone/CDlsc-mm.id +- tag: lsc-mm +- skipDeployment: "false" +CDlsc-mm-PROD-E2E.NA-Prod: +- name: CD_lsc-mm PROD-E2E +- mzName: CD_lsc-mm/management-zone/CDlsc-mm.name +- mzId: CD_lsc-mm/management-zone/CDlsc-mm.id +- tag: lsc-mm +- skipDeployment: "false" +CDlsc-mm-PROD-E2E.CN-Prod: +- name: CD_lsc-mm PROD-E2E +- mzName: CD_lsc-mm/management-zone/CDlsc-mm.name +- mzId: CD_lsc-mm/management-zone/CDlsc-mm.id +- tag: lsc-mm +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDlsc-mm-INT-TEST: +- name: CD_lsc-mm INT-TEST +- mzName: CD_lsc-mm/management-zone/CDlsc-mm.name +- mzId: CD_lsc-mm/management-zone/CDlsc-mm.id +- tag: lsc-mm +- skipDeployment: "true" +#Configuration +CDlsc-mm-INT-TEST.EMEA-PreProd: +- name: CD_lsc-mm INT-TEST +- mzName: CD_lsc-mm/management-zone/CDlsc-mm.name +- mzId: CD_lsc-mm/management-zone/CDlsc-mm.id +- tag: lsc-mm +- skipDeployment: "false" +CDlsc-mm-INT-TEST.NA-PreProd: +- name: CD_lsc-mm INT-TEST +- mzName: CD_lsc-mm/management-zone/CDlsc-mm.name +- mzId: CD_lsc-mm/management-zone/CDlsc-mm.id +- env: INT +- skipDeployment: "false" +CDlsc-mm-INT-TEST.CN-PreProd: +- name: CD_lsc-mm INT-TEST +- mzName: CD_lsc-mm/management-zone/CDlsc-mm.name +- mzId: CD_lsc-mm/management-zone/CDlsc-mm.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-mm/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_lsc-mm/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-mm/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-mm/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_lsc-mm/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-mm/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-mm/management-zone/README.md b/BMW-Dynatrace-config/CD_lsc-mm/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-mm/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_lsc-mm/management-zone/default.json b/BMW-Dynatrace-config/CD_lsc-mm/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-mm/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-mm/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_lsc-mm/management-zone/management-zone.yaml new file mode 100644 index 00000000..07246ecf --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-mm/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDlsc-mm: default.json + +CDlsc-mm: +- name: CD_lsc-mm +- tag: lsc-mm diff --git a/BMW-Dynatrace-config/CD_lsc-mm/notification/README.md b/BMW-Dynatrace-config/CD_lsc-mm/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-mm/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-mm/notification/email.json b/BMW-Dynatrace-config/CD_lsc-mm/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-mm/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-mm/notification/msTeams.json b/BMW-Dynatrace-config/CD_lsc-mm/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-mm/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-mm/notification/notification.yaml b/BMW-Dynatrace-config/CD_lsc-mm/notification/notification.yaml new file mode 100644 index 00000000..283201bf --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-mm/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDlsc-mm-PROD: msTeams.json +- CDlsc-mm-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDlsc-mm-PROD: +- name: CD_lsc-mm PROD +- alertingProfile: CD_lsc-mm/alerting-profile/CDlsc-mm-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDlsc-mm-PROD.EMEA-Prod: +- name: CD_lsc-mm PROD +- alertingProfile: CD_lsc-mm/alerting-profile/CDlsc-mm-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDlsc-mm-PROD.NA-Prod: +- name: CD_lsc-mm PROD +- alertingProfile: CD_lsc-mm/alerting-profile/CDlsc-mm-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDlsc-mm-PROD.CN-Prod: +- name: CD_lsc-mm PROD +- alertingProfile: CD_lsc-mm/alerting-profile/CDlsc-mm-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDlsc-mm-INT: +- name: CD_lsc-mm INT +- alertingProfile: CD_lsc-mm/alerting-profile/CDlsc-mm-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDlsc-mm-INT.EMEA-PreProd: +- name: CD_lsc-mm INT +- alertingProfile: CD_lsc-mm/alerting-profile/CDlsc-mm-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDlsc-mm-INT.NA-PreProd: +- name: CD_lsc-mm INT +- alertingProfile: CD_lsc-mm/alerting-profile/CDlsc-mm-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDlsc-mm-INT.CN-PreProd: +- name: CD_lsc-mm INT +- alertingProfile: CD_lsc-mm/alerting-profile/CDlsc-mm-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-mm/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_lsc-mm/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-mm/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-mm/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_lsc-mm/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-mm/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-mm/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_lsc-mm/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..3f409ad6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-mm/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- lsc-mm: default.json + +lsc-mm: +- name: CD_lsc-mm - +- mzName: CD_lsc-mm/management-zone/CDlsc-mm.name +- mzId: CD_lsc-mm/management-zone/CDlsc-mm.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-oc/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_lsc-oc/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..c1187825 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-oc/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDlsc-oc-PROD: default.json +- CDlsc-oc-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDlsc-oc-PROD: +- name: CD_lsc-oc PROD +- tag: lsc-oc +- mzId: CD_lsc-oc/management-zone/CDlsc-oc.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDlsc-oc-PROD.EMEA-Prod: +- name: CD_lsc-oc PROD +- tag: lsc-oc +- mzId: CD_lsc-oc/management-zone/CDlsc-oc.id +- env: PROD +- skipDeployment: "false" +CDlsc-oc-PROD.NA-Prod: +- name: CD_lsc-oc PROD +- tag: lsc-oc +- mzId: CD_lsc-oc/management-zone/CDlsc-oc.id +- env: PROD +- skipDeployment: "false" +CDlsc-oc-PROD.CN-Prod: +- name: CD_lsc-oc PROD +- tag: lsc-oc +- mzId: CD_lsc-oc/management-zone/CDlsc-oc.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDlsc-oc-INT: +- name: CD_lsc-oc INT +- tag: lsc-oc +- mzId: CD_lsc-oc/management-zone/CDlsc-oc.id +- env: INT +- skipDeployment: "true" +#Configuration +CDlsc-oc-INT.EMEA-PreProd: +- name: CD_lsc-oc INT +- tag: lsc-oc +- mzId: CD_lsc-oc/management-zone/CDlsc-oc.id +- env: INT +- skipDeployment: "false" +CDlsc-oc-INT.NA-PreProd: +- name: CD_lsc-oc INT +- tag: lsc-oc +- mzId: CD_lsc-oc/management-zone/CDlsc-oc.id +- env: INT +- skipDeployment: "false" +CDlsc-oc-INT.CN-PreProd: +- name: CD_lsc-oc INT +- tag: lsc-oc +- mzId: CD_lsc-oc/management-zone/CDlsc-oc.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-oc/alerting-profile/default.json b/BMW-Dynatrace-config/CD_lsc-oc/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-oc/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-oc/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_lsc-oc/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-oc/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-oc/custom-service-java/README.md b/BMW-Dynatrace-config/CD_lsc-oc/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-oc/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-oc/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_lsc-oc/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-oc/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-oc/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_lsc-oc/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-oc/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-oc/dashboard/README.md b/BMW-Dynatrace-config/CD_lsc-oc/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-oc/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-oc/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_lsc-oc/dashboard/dashboard.yaml new file mode 100644 index 00000000..f678884d --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-oc/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDlsc-oc-PROD-E2E: defaultPRODE2E.json +- CDlsc-oc-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDlsc-oc-PROD-E2E: +- name: CD_lsc-oc PROD-E2E +- mzName: CD_lsc-oc/management-zone/CDlsc-oc.name +- mzId: CD_lsc-oc/management-zone/CDlsc-oc.id +- skipDeployment: "true" +#Configuration +CDlsc-oc-PROD-E2E.EMEA-Prod: +- name: CD_lsc-oc PROD-E2E +- mzName: CD_lsc-oc/management-zone/CDlsc-oc.name +- mzId: CD_lsc-oc/management-zone/CDlsc-oc.id +- tag: lsc-oc +- skipDeployment: "false" +CDlsc-oc-PROD-E2E.NA-Prod: +- name: CD_lsc-oc PROD-E2E +- mzName: CD_lsc-oc/management-zone/CDlsc-oc.name +- mzId: CD_lsc-oc/management-zone/CDlsc-oc.id +- tag: lsc-oc +- skipDeployment: "false" +CDlsc-oc-PROD-E2E.CN-Prod: +- name: CD_lsc-oc PROD-E2E +- mzName: CD_lsc-oc/management-zone/CDlsc-oc.name +- mzId: CD_lsc-oc/management-zone/CDlsc-oc.id +- tag: lsc-oc +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDlsc-oc-INT-TEST: +- name: CD_lsc-oc INT-TEST +- mzName: CD_lsc-oc/management-zone/CDlsc-oc.name +- mzId: CD_lsc-oc/management-zone/CDlsc-oc.id +- tag: lsc-oc +- skipDeployment: "true" +#Configuration +CDlsc-oc-INT-TEST.EMEA-PreProd: +- name: CD_lsc-oc INT-TEST +- mzName: CD_lsc-oc/management-zone/CDlsc-oc.name +- mzId: CD_lsc-oc/management-zone/CDlsc-oc.id +- tag: lsc-oc +- skipDeployment: "false" +CDlsc-oc-INT-TEST.NA-PreProd: +- name: CD_lsc-oc INT-TEST +- mzName: CD_lsc-oc/management-zone/CDlsc-oc.name +- mzId: CD_lsc-oc/management-zone/CDlsc-oc.id +- env: INT +- skipDeployment: "false" +CDlsc-oc-INT-TEST.CN-PreProd: +- name: CD_lsc-oc INT-TEST +- mzName: CD_lsc-oc/management-zone/CDlsc-oc.name +- mzId: CD_lsc-oc/management-zone/CDlsc-oc.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-oc/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_lsc-oc/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-oc/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-oc/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_lsc-oc/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-oc/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-oc/management-zone/README.md b/BMW-Dynatrace-config/CD_lsc-oc/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-oc/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_lsc-oc/management-zone/default.json b/BMW-Dynatrace-config/CD_lsc-oc/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-oc/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-oc/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_lsc-oc/management-zone/management-zone.yaml new file mode 100644 index 00000000..eb7dd4fd --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-oc/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDlsc-oc: default.json + +CDlsc-oc: +- name: CD_lsc-oc +- tag: lsc-oc diff --git a/BMW-Dynatrace-config/CD_lsc-oc/notification/README.md b/BMW-Dynatrace-config/CD_lsc-oc/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-oc/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-oc/notification/email.json b/BMW-Dynatrace-config/CD_lsc-oc/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-oc/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-oc/notification/msTeams.json b/BMW-Dynatrace-config/CD_lsc-oc/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-oc/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-oc/notification/notification.yaml b/BMW-Dynatrace-config/CD_lsc-oc/notification/notification.yaml new file mode 100644 index 00000000..5b77c471 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-oc/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDlsc-oc-PROD: msTeams.json +- CDlsc-oc-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDlsc-oc-PROD: +- name: CD_lsc-oc PROD +- alertingProfile: CD_lsc-oc/alerting-profile/CDlsc-oc-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDlsc-oc-PROD.EMEA-Prod: +- name: CD_lsc-oc PROD +- alertingProfile: CD_lsc-oc/alerting-profile/CDlsc-oc-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDlsc-oc-PROD.NA-Prod: +- name: CD_lsc-oc PROD +- alertingProfile: CD_lsc-oc/alerting-profile/CDlsc-oc-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDlsc-oc-PROD.CN-Prod: +- name: CD_lsc-oc PROD +- alertingProfile: CD_lsc-oc/alerting-profile/CDlsc-oc-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDlsc-oc-INT: +- name: CD_lsc-oc INT +- alertingProfile: CD_lsc-oc/alerting-profile/CDlsc-oc-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDlsc-oc-INT.EMEA-PreProd: +- name: CD_lsc-oc INT +- alertingProfile: CD_lsc-oc/alerting-profile/CDlsc-oc-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDlsc-oc-INT.NA-PreProd: +- name: CD_lsc-oc INT +- alertingProfile: CD_lsc-oc/alerting-profile/CDlsc-oc-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDlsc-oc-INT.CN-PreProd: +- name: CD_lsc-oc INT +- alertingProfile: CD_lsc-oc/alerting-profile/CDlsc-oc-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-oc/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_lsc-oc/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-oc/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-oc/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_lsc-oc/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-oc/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-oc/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_lsc-oc/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..449481a3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-oc/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- lsc-oc: default.json + +lsc-oc: +- name: CD_lsc-oc - +- mzName: CD_lsc-oc/management-zone/CDlsc-oc.name +- mzId: CD_lsc-oc/management-zone/CDlsc-oc.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-og/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_lsc-og/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..abadc7e5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-og/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDlsc-og-PROD: default.json +- CDlsc-og-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDlsc-og-PROD: +- name: CD_lsc-og PROD +- tag: lsc-og +- mzId: CD_lsc-og/management-zone/CDlsc-og.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDlsc-og-PROD.EMEA-Prod: +- name: CD_lsc-og PROD +- tag: lsc-og +- mzId: CD_lsc-og/management-zone/CDlsc-og.id +- env: PROD +- skipDeployment: "false" +CDlsc-og-PROD.NA-Prod: +- name: CD_lsc-og PROD +- tag: lsc-og +- mzId: CD_lsc-og/management-zone/CDlsc-og.id +- env: PROD +- skipDeployment: "false" +CDlsc-og-PROD.CN-Prod: +- name: CD_lsc-og PROD +- tag: lsc-og +- mzId: CD_lsc-og/management-zone/CDlsc-og.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDlsc-og-INT: +- name: CD_lsc-og INT +- tag: lsc-og +- mzId: CD_lsc-og/management-zone/CDlsc-og.id +- env: INT +- skipDeployment: "true" +#Configuration +CDlsc-og-INT.EMEA-PreProd: +- name: CD_lsc-og INT +- tag: lsc-og +- mzId: CD_lsc-og/management-zone/CDlsc-og.id +- env: INT +- skipDeployment: "false" +CDlsc-og-INT.NA-PreProd: +- name: CD_lsc-og INT +- tag: lsc-og +- mzId: CD_lsc-og/management-zone/CDlsc-og.id +- env: INT +- skipDeployment: "false" +CDlsc-og-INT.CN-PreProd: +- name: CD_lsc-og INT +- tag: lsc-og +- mzId: CD_lsc-og/management-zone/CDlsc-og.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-og/alerting-profile/default.json b/BMW-Dynatrace-config/CD_lsc-og/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-og/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-og/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_lsc-og/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-og/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-og/custom-service-java/README.md b/BMW-Dynatrace-config/CD_lsc-og/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-og/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-og/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_lsc-og/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-og/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-og/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_lsc-og/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-og/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-og/dashboard/README.md b/BMW-Dynatrace-config/CD_lsc-og/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-og/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-og/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_lsc-og/dashboard/dashboard.yaml new file mode 100644 index 00000000..e678cb2d --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-og/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDlsc-og-PROD-E2E: defaultPRODE2E.json +- CDlsc-og-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDlsc-og-PROD-E2E: +- name: CD_lsc-og PROD-E2E +- mzName: CD_lsc-og/management-zone/CDlsc-og.name +- mzId: CD_lsc-og/management-zone/CDlsc-og.id +- skipDeployment: "true" +#Configuration +CDlsc-og-PROD-E2E.EMEA-Prod: +- name: CD_lsc-og PROD-E2E +- mzName: CD_lsc-og/management-zone/CDlsc-og.name +- mzId: CD_lsc-og/management-zone/CDlsc-og.id +- tag: lsc-og +- skipDeployment: "false" +CDlsc-og-PROD-E2E.NA-Prod: +- name: CD_lsc-og PROD-E2E +- mzName: CD_lsc-og/management-zone/CDlsc-og.name +- mzId: CD_lsc-og/management-zone/CDlsc-og.id +- tag: lsc-og +- skipDeployment: "false" +CDlsc-og-PROD-E2E.CN-Prod: +- name: CD_lsc-og PROD-E2E +- mzName: CD_lsc-og/management-zone/CDlsc-og.name +- mzId: CD_lsc-og/management-zone/CDlsc-og.id +- tag: lsc-og +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDlsc-og-INT-TEST: +- name: CD_lsc-og INT-TEST +- mzName: CD_lsc-og/management-zone/CDlsc-og.name +- mzId: CD_lsc-og/management-zone/CDlsc-og.id +- tag: lsc-og +- skipDeployment: "true" +#Configuration +CDlsc-og-INT-TEST.EMEA-PreProd: +- name: CD_lsc-og INT-TEST +- mzName: CD_lsc-og/management-zone/CDlsc-og.name +- mzId: CD_lsc-og/management-zone/CDlsc-og.id +- tag: lsc-og +- skipDeployment: "false" +CDlsc-og-INT-TEST.NA-PreProd: +- name: CD_lsc-og INT-TEST +- mzName: CD_lsc-og/management-zone/CDlsc-og.name +- mzId: CD_lsc-og/management-zone/CDlsc-og.id +- env: INT +- skipDeployment: "false" +CDlsc-og-INT-TEST.CN-PreProd: +- name: CD_lsc-og INT-TEST +- mzName: CD_lsc-og/management-zone/CDlsc-og.name +- mzId: CD_lsc-og/management-zone/CDlsc-og.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-og/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_lsc-og/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-og/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-og/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_lsc-og/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-og/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-og/management-zone/README.md b/BMW-Dynatrace-config/CD_lsc-og/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-og/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_lsc-og/management-zone/default.json b/BMW-Dynatrace-config/CD_lsc-og/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-og/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-og/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_lsc-og/management-zone/management-zone.yaml new file mode 100644 index 00000000..4aceb3fe --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-og/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDlsc-og: default.json + +CDlsc-og: +- name: CD_lsc-og +- tag: lsc-og diff --git a/BMW-Dynatrace-config/CD_lsc-og/notification/README.md b/BMW-Dynatrace-config/CD_lsc-og/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-og/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-og/notification/email.json b/BMW-Dynatrace-config/CD_lsc-og/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-og/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-og/notification/msTeams.json b/BMW-Dynatrace-config/CD_lsc-og/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-og/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-og/notification/notification.yaml b/BMW-Dynatrace-config/CD_lsc-og/notification/notification.yaml new file mode 100644 index 00000000..41c9175e --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-og/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDlsc-og-PROD: msTeams.json +- CDlsc-og-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDlsc-og-PROD: +- name: CD_lsc-og PROD +- alertingProfile: CD_lsc-og/alerting-profile/CDlsc-og-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDlsc-og-PROD.EMEA-Prod: +- name: CD_lsc-og PROD +- alertingProfile: CD_lsc-og/alerting-profile/CDlsc-og-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDlsc-og-PROD.NA-Prod: +- name: CD_lsc-og PROD +- alertingProfile: CD_lsc-og/alerting-profile/CDlsc-og-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDlsc-og-PROD.CN-Prod: +- name: CD_lsc-og PROD +- alertingProfile: CD_lsc-og/alerting-profile/CDlsc-og-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDlsc-og-INT: +- name: CD_lsc-og INT +- alertingProfile: CD_lsc-og/alerting-profile/CDlsc-og-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDlsc-og-INT.EMEA-PreProd: +- name: CD_lsc-og INT +- alertingProfile: CD_lsc-og/alerting-profile/CDlsc-og-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDlsc-og-INT.NA-PreProd: +- name: CD_lsc-og INT +- alertingProfile: CD_lsc-og/alerting-profile/CDlsc-og-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDlsc-og-INT.CN-PreProd: +- name: CD_lsc-og INT +- alertingProfile: CD_lsc-og/alerting-profile/CDlsc-og-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-og/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_lsc-og/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-og/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-og/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_lsc-og/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-og/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-og/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_lsc-og/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..8a4f79db --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-og/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- lsc-og: default.json + +lsc-og: +- name: CD_lsc-og - +- mzName: CD_lsc-og/management-zone/CDlsc-og.name +- mzId: CD_lsc-og/management-zone/CDlsc-og.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mds/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_mds/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..f1230cef --- /dev/null +++ b/BMW-Dynatrace-config/CD_mds/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDmds-PROD: default.json +- CDmds-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDmds-PROD: +- name: CD_mds PROD +- tag: mds +- mzId: CD_mds/management-zone/CDmds.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDmds-PROD.EMEA-Prod: +- name: CD_mds PROD +- tag: mds +- mzId: CD_mds/management-zone/CDmds.id +- env: PROD +- skipDeployment: "false" +CDmds-PROD.NA-Prod: +- name: CD_mds PROD +- tag: mds +- mzId: CD_mds/management-zone/CDmds.id +- env: PROD +- skipDeployment: "false" +CDmds-PROD.CN-Prod: +- name: CD_mds PROD +- tag: mds +- mzId: CD_mds/management-zone/CDmds.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDmds-INT: +- name: CD_mds INT +- tag: mds +- mzId: CD_mds/management-zone/CDmds.id +- env: INT +- skipDeployment: "true" +#Configuration +CDmds-INT.EMEA-PreProd: +- name: CD_mds INT +- tag: mds +- mzId: CD_mds/management-zone/CDmds.id +- env: INT +- skipDeployment: "false" +CDmds-INT.NA-PreProd: +- name: CD_mds INT +- tag: mds +- mzId: CD_mds/management-zone/CDmds.id +- env: INT +- skipDeployment: "false" +CDmds-INT.CN-PreProd: +- name: CD_mds INT +- tag: mds +- mzId: CD_mds/management-zone/CDmds.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mds/alerting-profile/default.json b/BMW-Dynatrace-config/CD_mds/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mds/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mds/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_mds/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_mds/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mds/custom-service-java/README.md b/BMW-Dynatrace-config/CD_mds/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mds/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mds/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_mds/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mds/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mds/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_mds/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mds/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mds/dashboard/README.md b/BMW-Dynatrace-config/CD_mds/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_mds/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mds/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_mds/dashboard/dashboard.yaml new file mode 100644 index 00000000..dfeb5e70 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mds/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDmds-PROD-E2E: defaultPRODE2E.json +- CDmds-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDmds-PROD-E2E: +- name: CD_mds PROD-E2E +- mzName: CD_mds/management-zone/CDmds.name +- mzId: CD_mds/management-zone/CDmds.id +- skipDeployment: "true" +#Configuration +CDmds-PROD-E2E.EMEA-Prod: +- name: CD_mds PROD-E2E +- mzName: CD_mds/management-zone/CDmds.name +- mzId: CD_mds/management-zone/CDmds.id +- tag: mds +- skipDeployment: "false" +CDmds-PROD-E2E.NA-Prod: +- name: CD_mds PROD-E2E +- mzName: CD_mds/management-zone/CDmds.name +- mzId: CD_mds/management-zone/CDmds.id +- tag: mds +- skipDeployment: "false" +CDmds-PROD-E2E.CN-Prod: +- name: CD_mds PROD-E2E +- mzName: CD_mds/management-zone/CDmds.name +- mzId: CD_mds/management-zone/CDmds.id +- tag: mds +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDmds-INT-TEST: +- name: CD_mds INT-TEST +- mzName: CD_mds/management-zone/CDmds.name +- mzId: CD_mds/management-zone/CDmds.id +- tag: mds +- skipDeployment: "true" +#Configuration +CDmds-INT-TEST.EMEA-PreProd: +- name: CD_mds INT-TEST +- mzName: CD_mds/management-zone/CDmds.name +- mzId: CD_mds/management-zone/CDmds.id +- tag: mds +- skipDeployment: "false" +CDmds-INT-TEST.NA-PreProd: +- name: CD_mds INT-TEST +- mzName: CD_mds/management-zone/CDmds.name +- mzId: CD_mds/management-zone/CDmds.id +- env: INT +- skipDeployment: "false" +CDmds-INT-TEST.CN-PreProd: +- name: CD_mds INT-TEST +- mzName: CD_mds/management-zone/CDmds.name +- mzId: CD_mds/management-zone/CDmds.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mds/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_mds/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mds/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mds/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_mds/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mds/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mds/management-zone/README.md b/BMW-Dynatrace-config/CD_mds/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mds/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_mds/management-zone/default.json b/BMW-Dynatrace-config/CD_mds/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_mds/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mds/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_mds/management-zone/management-zone.yaml new file mode 100644 index 00000000..4dfc4672 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mds/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDmds: default.json + +CDmds: +- name: CD_mds +- tag: mds diff --git a/BMW-Dynatrace-config/CD_mds/notification/README.md b/BMW-Dynatrace-config/CD_mds/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mds/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mds/notification/email.json b/BMW-Dynatrace-config/CD_mds/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mds/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mds/notification/msTeams.json b/BMW-Dynatrace-config/CD_mds/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mds/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mds/notification/notification.yaml b/BMW-Dynatrace-config/CD_mds/notification/notification.yaml new file mode 100644 index 00000000..4eefb526 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mds/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDmds-PROD: msTeams.json +- CDmds-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDmds-PROD: +- name: CD_mds PROD +- alertingProfile: CD_mds/alerting-profile/CDmds-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDmds-PROD.EMEA-Prod: +- name: CD_mds PROD +- alertingProfile: CD_mds/alerting-profile/CDmds-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDmds-PROD.NA-Prod: +- name: CD_mds PROD +- alertingProfile: CD_mds/alerting-profile/CDmds-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDmds-PROD.CN-Prod: +- name: CD_mds PROD +- alertingProfile: CD_mds/alerting-profile/CDmds-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDmds-INT: +- name: CD_mds INT +- alertingProfile: CD_mds/alerting-profile/CDmds-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDmds-INT.EMEA-PreProd: +- name: CD_mds INT +- alertingProfile: CD_mds/alerting-profile/CDmds-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDmds-INT.NA-PreProd: +- name: CD_mds INT +- alertingProfile: CD_mds/alerting-profile/CDmds-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDmds-INT.CN-PreProd: +- name: CD_mds INT +- alertingProfile: CD_mds/alerting-profile/CDmds-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mds/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_mds/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_mds/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mds/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_mds/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_mds/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mds/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_mds/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..abdf20b6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mds/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- mds: default.json + +mds: +- name: CD_mds - +- mzName: CD_mds/management-zone/CDmds.name +- mzId: CD_mds/management-zone/CDmds.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ml-ingestion-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_ml-ingestion-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..1aef9c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ml-ingestion-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDml-ingestion-service-PROD: default.json +- CDml-ingestion-service-E2E: default.json +- CDml-ingestion-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDml-ingestion-service-PROD: +- name: CD_ml-ingestion-service PROD +- tag: ml-ingestion-service +- mzId: CD_ml-ingestion-service/management-zone/CDml-ingestion-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDml-ingestion-service-PROD.EMEA-Prod: +- name: CD_ml-ingestion-service PROD +- tag: ml-ingestion-service +- mzId: CD_ml-ingestion-service/management-zone/CDml-ingestion-service.id +- env: PROD +- skipDeployment: "false" +CDml-ingestion-service-PROD.NA-Prod: +- name: CD_ml-ingestion-service PROD +- tag: ml-ingestion-service +- mzId: CD_ml-ingestion-service/management-zone/CDml-ingestion-service.id +- env: PROD +- skipDeployment: "false" +CDml-ingestion-service-PROD.CN-Prod: +- name: CD_ml-ingestion-service PROD +- tag: ml-ingestion-service +- mzId: CD_ml-ingestion-service/management-zone/CDml-ingestion-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDml-ingestion-service-E2E: +- name: CD_ml-ingestion-service E2E +- tag: ml-ingestion-service +- mzId: CD_ml-ingestion-service/management-zone/CDml-ingestion-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDml-ingestion-service-E2E.EMEA-Prod: +- name: CD_ml-ingestion-service E2E +- tag: ml-ingestion-service +- mzId: CD_ml-ingestion-service/management-zone/CDml-ingestion-service.id +- env: E2E +- skipDeployment: "false" +CDml-ingestion-service-E2E.NA-Prod: +- name: CD_ml-ingestion-service E2E +- tag: ml-ingestion-service +- mzId: CD_ml-ingestion-service/management-zone/CDml-ingestion-service.id +- env: E2E +- skipDeployment: "false" +CDml-ingestion-service-E2E.CN-Prod: +- name: CD_ml-ingestion-service E2E +- tag: ml-ingestion-service +- mzId: CD_ml-ingestion-service/management-zone/CDml-ingestion-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDml-ingestion-service-INT: +- name: CD_ml-ingestion-service INT +- tag: ml-ingestion-service +- mzId: CD_ml-ingestion-service/management-zone/CDml-ingestion-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDml-ingestion-service-INT.EMEA-PreProd: +- name: CD_ml-ingestion-service INT +- tag: ml-ingestion-service +- mzId: CD_ml-ingestion-service/management-zone/CDml-ingestion-service.id +- env: INT +- skipDeployment: "false" +CDml-ingestion-service-INT.NA-PreProd: +- name: CD_ml-ingestion-service INT +- tag: ml-ingestion-service +- mzId: CD_ml-ingestion-service/management-zone/CDml-ingestion-service.id +- env: INT +- skipDeployment: "false" +CDml-ingestion-service-INT.CN-PreProd: +- name: CD_ml-ingestion-service INT +- tag: ml-ingestion-service +- mzId: CD_ml-ingestion-service/management-zone/CDml-ingestion-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ml-ingestion-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_ml-ingestion-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ml-ingestion-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ml-ingestion-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_ml-ingestion-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ml-ingestion-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ml-ingestion-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_ml-ingestion-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ml-ingestion-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ml-ingestion-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_ml-ingestion-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ml-ingestion-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ml-ingestion-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_ml-ingestion-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ml-ingestion-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ml-ingestion-service/dashboard/README.md b/BMW-Dynatrace-config/CD_ml-ingestion-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ml-ingestion-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ml-ingestion-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_ml-ingestion-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..786844ad --- /dev/null +++ b/BMW-Dynatrace-config/CD_ml-ingestion-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDml-ingestion-service-PROD-E2E: defaultPRODE2E.json +- CDml-ingestion-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDml-ingestion-service-PROD-E2E: +- name: CD_ml-ingestion-service PROD +- mzName: CD_ml-ingestion-service/management-zone/CDml-ingestion-service.name +- mzId: CD_ml-ingestion-service/management-zone/CDml-ingestion-service.id +- skipDeployment: "true" +#Configuration +CDml-ingestion-service-PROD-E2E.EMEA-Prod: +- name: CD_ml-ingestion-service PROD +- mzName: CD_ml-ingestion-service/management-zone/CDml-ingestion-service.name +- mzId: CD_ml-ingestion-service/management-zone/CDml-ingestion-service.id +- tag: ml-ingestion-service +- skipDeployment: "false" +CDml-ingestion-service-PROD-E2E.NA-Prod: +- name: CD_ml-ingestion-service PROD +- mzName: CD_ml-ingestion-service/management-zone/CDml-ingestion-service.name +- mzId: CD_ml-ingestion-service/management-zone/CDml-ingestion-service.id +- tag: ml-ingestion-service +- skipDeployment: "false" +CDml-ingestion-service-PROD-E2E.CN-Prod: +- name: CD_ml-ingestion-service PROD +- mzName: CD_ml-ingestion-service/management-zone/CDml-ingestion-service.name +- mzId: CD_ml-ingestion-service/management-zone/CDml-ingestion-service.id +- tag: ml-ingestion-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDml-ingestion-service-INT-TEST: +- name: CD_ml-ingestion-service INT-TEST +- mzName: CD_ml-ingestion-service/management-zone/CDml-ingestion-service.name +- mzId: CD_ml-ingestion-service/management-zone/CDml-ingestion-service.id +- tag: ml-ingestion-service +- skipDeployment: "true" +#Configuration +CDml-ingestion-service-INT-TEST.EMEA-PreProd: +- name: CD_ml-ingestion-service INT-TEST +- mzName: CD_ml-ingestion-service/management-zone/CDml-ingestion-service.name +- mzId: CD_ml-ingestion-service/management-zone/CDml-ingestion-service.id +- tag: ml-ingestion-service +- skipDeployment: "false" +CDml-ingestion-service-INT-TEST.NA-PreProd: +- name: CD_ml-ingestion-service INT-TEST +- mzName: CD_ml-ingestion-service/management-zone/CDml-ingestion-service.name +- mzId: CD_ml-ingestion-service/management-zone/CDml-ingestion-service.id +- env: INT +- skipDeployment: "false" +CDml-ingestion-service-INT-TEST.CN-PreProd: +- name: CD_ml-ingestion-service INT-TEST +- mzName: CD_ml-ingestion-service/management-zone/CDml-ingestion-service.name +- mzId: CD_ml-ingestion-service/management-zone/CDml-ingestion-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ml-ingestion-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_ml-ingestion-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ml-ingestion-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ml-ingestion-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_ml-ingestion-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_ml-ingestion-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ml-ingestion-service/management-zone/README.md b/BMW-Dynatrace-config/CD_ml-ingestion-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ml-ingestion-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_ml-ingestion-service/management-zone/default.json b/BMW-Dynatrace-config/CD_ml-ingestion-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_ml-ingestion-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ml-ingestion-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_ml-ingestion-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..14b385de --- /dev/null +++ b/BMW-Dynatrace-config/CD_ml-ingestion-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDml-ingestion-service: default.json + +CDml-ingestion-service: +- name: CD_ml-ingestion-service +- tag: ml-ingestion-service diff --git a/BMW-Dynatrace-config/CD_ml-ingestion-service/notification/README.md b/BMW-Dynatrace-config/CD_ml-ingestion-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ml-ingestion-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ml-ingestion-service/notification/email.json b/BMW-Dynatrace-config/CD_ml-ingestion-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ml-ingestion-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ml-ingestion-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_ml-ingestion-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ml-ingestion-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ml-ingestion-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_ml-ingestion-service/notification/notification.yaml new file mode 100644 index 00000000..2ca910fb --- /dev/null +++ b/BMW-Dynatrace-config/CD_ml-ingestion-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDml-ingestion-service-PROD: msTeams.json +- CDml-ingestion-service-E2E: msTeams.json +- CDml-ingestion-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDml-ingestion-service-PROD: +- name: CD_ml-ingestion-service PROD +- alertingProfile: CD_ml-ingestion-service/alerting-profile/CDml-ingestion-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDml-ingestion-service-PROD.EMEA-Prod: +- name: CD_ml-ingestion-service PROD +- alertingProfile: CD_ml-ingestion-service/alerting-profile/CDml-ingestion-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDml-ingestion-service-PROD.NA-Prod: +- name: CD_ml-ingestion-service PROD +- alertingProfile: CD_ml-ingestion-service/alerting-profile/CDml-ingestion-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDml-ingestion-service-PROD.CN-Prod: +- name: CD_ml-ingestion-service PROD +- alertingProfile: CD_ml-ingestion-service/alerting-profile/CDml-ingestion-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDml-ingestion-service-E2E: +- name: CD_ml-ingestion-service E2E +- alertingProfile: CD_ml-ingestion-service/alerting-profile/CDml-ingestion-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDml-ingestion-service-E2E.EMEA-Prod: +- name: CD_ml-ingestion-service E2E +- alertingProfile: CD_ml-ingestion-service/alerting-profile/CDml-ingestion-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDml-ingestion-service-E2E.NA-Prod: +- name: CD_ml-ingestion-service E2E +- alertingProfile: CD_ml-ingestion-service/alerting-profile/CDml-ingestion-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDml-ingestion-service-E2E.CN-Prod: +- name: CD_ml-ingestion-service E2E +- alertingProfile: CD_ml-ingestion-service/alerting-profile/CDml-ingestion-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDml-ingestion-service-INT: +- name: CD_ml-ingestion-service INT +- alertingProfile: CD_ml-ingestion-service/alerting-profile/CDml-ingestion-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDml-ingestion-service-INT.EMEA-PreProd: +- name: CD_ml-ingestion-service INT +- alertingProfile: CD_ml-ingestion-service/alerting-profile/CDml-ingestion-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDml-ingestion-service-INT.NA-PreProd: +- name: CD_ml-ingestion-service INT +- alertingProfile: CD_ml-ingestion-service/alerting-profile/CDml-ingestion-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDml-ingestion-service-INT.CN-PreProd: +- name: CD_ml-ingestion-service INT +- alertingProfile: CD_ml-ingestion-service/alerting-profile/CDml-ingestion-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ml-ingestion-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_ml-ingestion-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_ml-ingestion-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ml-ingestion-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_ml-ingestion-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ml-ingestion-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ml-ingestion-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_ml-ingestion-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..9d78eb27 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ml-ingestion-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- ml-ingestion-service: default.json + +ml-ingestion-service: +- name: CD_ml-ingestion-service - +- mzName: CD_ml-ingestion-service/management-zone/CDml-ingestion-service.name +- mzId: CD_ml-ingestion-service/management-zone/CDml-ingestion-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mlc/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_mlc/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..2a4fcab8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mlc/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDmlc-PROD: default.json +- CDmlc-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDmlc-PROD: +- name: CD_mlc PROD +- tag: mlc +- mzId: CD_mlc/management-zone/CDmlc.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDmlc-PROD.EMEA-Prod: +- name: CD_mlc PROD +- tag: mlc +- mzId: CD_mlc/management-zone/CDmlc.id +- env: PROD +- skipDeployment: "false" +CDmlc-PROD.NA-Prod: +- name: CD_mlc PROD +- tag: mlc +- mzId: CD_mlc/management-zone/CDmlc.id +- env: PROD +- skipDeployment: "false" +CDmlc-PROD.CN-Prod: +- name: CD_mlc PROD +- tag: mlc +- mzId: CD_mlc/management-zone/CDmlc.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDmlc-INT: +- name: CD_mlc INT +- tag: mlc +- mzId: CD_mlc/management-zone/CDmlc.id +- env: INT +- skipDeployment: "true" +#Configuration +CDmlc-INT.EMEA-PreProd: +- name: CD_mlc INT +- tag: mlc +- mzId: CD_mlc/management-zone/CDmlc.id +- env: INT +- skipDeployment: "false" +CDmlc-INT.NA-PreProd: +- name: CD_mlc INT +- tag: mlc +- mzId: CD_mlc/management-zone/CDmlc.id +- env: INT +- skipDeployment: "false" +CDmlc-INT.CN-PreProd: +- name: CD_mlc INT +- tag: mlc +- mzId: CD_mlc/management-zone/CDmlc.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mlc/alerting-profile/default.json b/BMW-Dynatrace-config/CD_mlc/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mlc/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mlc/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_mlc/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_mlc/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mlc/custom-service-java/README.md b/BMW-Dynatrace-config/CD_mlc/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mlc/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mlc/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_mlc/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mlc/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mlc/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_mlc/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mlc/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mlc/dashboard/README.md b/BMW-Dynatrace-config/CD_mlc/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_mlc/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mlc/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_mlc/dashboard/dashboard.yaml new file mode 100644 index 00000000..703dbe34 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mlc/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDmlc-PROD-E2E: defaultPRODE2E.json +- CDmlc-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDmlc-PROD-E2E: +- name: CD_mlc PROD-E2E +- mzName: CD_mlc/management-zone/CDmlc.name +- mzId: CD_mlc/management-zone/CDmlc.id +- skipDeployment: "true" +#Configuration +CDmlc-PROD-E2E.EMEA-Prod: +- name: CD_mlc PROD-E2E +- mzName: CD_mlc/management-zone/CDmlc.name +- mzId: CD_mlc/management-zone/CDmlc.id +- tag: mlc +- skipDeployment: "false" +CDmlc-PROD-E2E.NA-Prod: +- name: CD_mlc PROD-E2E +- mzName: CD_mlc/management-zone/CDmlc.name +- mzId: CD_mlc/management-zone/CDmlc.id +- tag: mlc +- skipDeployment: "false" +CDmlc-PROD-E2E.CN-Prod: +- name: CD_mlc PROD-E2E +- mzName: CD_mlc/management-zone/CDmlc.name +- mzId: CD_mlc/management-zone/CDmlc.id +- tag: mlc +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDmlc-INT-TEST: +- name: CD_mlc INT-TEST +- mzName: CD_mlc/management-zone/CDmlc.name +- mzId: CD_mlc/management-zone/CDmlc.id +- tag: mlc +- skipDeployment: "true" +#Configuration +CDmlc-INT-TEST.EMEA-PreProd: +- name: CD_mlc INT-TEST +- mzName: CD_mlc/management-zone/CDmlc.name +- mzId: CD_mlc/management-zone/CDmlc.id +- tag: mlc +- skipDeployment: "false" +CDmlc-INT-TEST.NA-PreProd: +- name: CD_mlc INT-TEST +- mzName: CD_mlc/management-zone/CDmlc.name +- mzId: CD_mlc/management-zone/CDmlc.id +- env: INT +- skipDeployment: "false" +CDmlc-INT-TEST.CN-PreProd: +- name: CD_mlc INT-TEST +- mzName: CD_mlc/management-zone/CDmlc.name +- mzId: CD_mlc/management-zone/CDmlc.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mlc/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_mlc/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mlc/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mlc/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_mlc/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mlc/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mlc/management-zone/README.md b/BMW-Dynatrace-config/CD_mlc/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mlc/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_mlc/management-zone/default.json b/BMW-Dynatrace-config/CD_mlc/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_mlc/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mlc/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_mlc/management-zone/management-zone.yaml new file mode 100644 index 00000000..59390502 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mlc/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDmlc: default.json + +CDmlc: +- name: CD_mlc +- tag: mlc diff --git a/BMW-Dynatrace-config/CD_mlc/notification/README.md b/BMW-Dynatrace-config/CD_mlc/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mlc/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mlc/notification/email.json b/BMW-Dynatrace-config/CD_mlc/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mlc/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mlc/notification/msTeams.json b/BMW-Dynatrace-config/CD_mlc/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mlc/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mlc/notification/notification.yaml b/BMW-Dynatrace-config/CD_mlc/notification/notification.yaml new file mode 100644 index 00000000..d11c93d8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mlc/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDmlc-PROD: msTeams.json +- CDmlc-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDmlc-PROD: +- name: CD_mlc PROD +- alertingProfile: CD_mlc/alerting-profile/CDmlc-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDmlc-PROD.EMEA-Prod: +- name: CD_mlc PROD +- alertingProfile: CD_mlc/alerting-profile/CDmlc-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDmlc-PROD.NA-Prod: +- name: CD_mlc PROD +- alertingProfile: CD_mlc/alerting-profile/CDmlc-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDmlc-PROD.CN-Prod: +- name: CD_mlc PROD +- alertingProfile: CD_mlc/alerting-profile/CDmlc-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDmlc-INT: +- name: CD_mlc INT +- alertingProfile: CD_mlc/alerting-profile/CDmlc-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDmlc-INT.EMEA-PreProd: +- name: CD_mlc INT +- alertingProfile: CD_mlc/alerting-profile/CDmlc-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDmlc-INT.NA-PreProd: +- name: CD_mlc INT +- alertingProfile: CD_mlc/alerting-profile/CDmlc-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDmlc-INT.CN-PreProd: +- name: CD_mlc INT +- alertingProfile: CD_mlc/alerting-profile/CDmlc-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mlc/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_mlc/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_mlc/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mlc/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_mlc/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_mlc/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mlc/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_mlc/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..ea4e9645 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mlc/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- mlc: default.json + +mlc: +- name: CD_mlc - +- mzName: CD_mlc/management-zone/CDmlc.name +- mzId: CD_mlc/management-zone/CDmlc.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrp/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_mrp/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..3c7f6ab4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrp/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDmrp-PROD: default.json +- CDmrp-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDmrp-PROD: +- name: CD_mrp PROD +- tag: mrp +- mzId: CD_mrp/management-zone/CDmrp.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDmrp-PROD.EMEA-Prod: +- name: CD_mrp PROD +- tag: mrp +- mzId: CD_mrp/management-zone/CDmrp.id +- env: PROD +- skipDeployment: "false" +CDmrp-PROD.NA-Prod: +- name: CD_mrp PROD +- tag: mrp +- mzId: CD_mrp/management-zone/CDmrp.id +- env: PROD +- skipDeployment: "false" +CDmrp-PROD.CN-Prod: +- name: CD_mrp PROD +- tag: mrp +- mzId: CD_mrp/management-zone/CDmrp.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDmrp-INT: +- name: CD_mrp INT +- tag: mrp +- mzId: CD_mrp/management-zone/CDmrp.id +- env: INT +- skipDeployment: "true" +#Configuration +CDmrp-INT.EMEA-PreProd: +- name: CD_mrp INT +- tag: mrp +- mzId: CD_mrp/management-zone/CDmrp.id +- env: INT +- skipDeployment: "false" +CDmrp-INT.NA-PreProd: +- name: CD_mrp INT +- tag: mrp +- mzId: CD_mrp/management-zone/CDmrp.id +- env: INT +- skipDeployment: "false" +CDmrp-INT.CN-PreProd: +- name: CD_mrp INT +- tag: mrp +- mzId: CD_mrp/management-zone/CDmrp.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrp/alerting-profile/default.json b/BMW-Dynatrace-config/CD_mrp/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrp/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrp/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_mrp/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrp/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrp/custom-service-java/README.md b/BMW-Dynatrace-config/CD_mrp/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrp/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrp/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_mrp/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrp/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrp/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_mrp/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrp/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrp/dashboard/README.md b/BMW-Dynatrace-config/CD_mrp/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrp/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrp/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_mrp/dashboard/dashboard.yaml new file mode 100644 index 00000000..a096f54f --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrp/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDmrp-PROD-E2E: defaultPRODE2E.json +- CDmrp-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDmrp-PROD-E2E: +- name: CD_mrp PROD-E2E +- mzName: CD_mrp/management-zone/CDmrp.name +- mzId: CD_mrp/management-zone/CDmrp.id +- skipDeployment: "true" +#Configuration +CDmrp-PROD-E2E.EMEA-Prod: +- name: CD_mrp PROD-E2E +- mzName: CD_mrp/management-zone/CDmrp.name +- mzId: CD_mrp/management-zone/CDmrp.id +- tag: mrp +- skipDeployment: "false" +CDmrp-PROD-E2E.NA-Prod: +- name: CD_mrp PROD-E2E +- mzName: CD_mrp/management-zone/CDmrp.name +- mzId: CD_mrp/management-zone/CDmrp.id +- tag: mrp +- skipDeployment: "false" +CDmrp-PROD-E2E.CN-Prod: +- name: CD_mrp PROD-E2E +- mzName: CD_mrp/management-zone/CDmrp.name +- mzId: CD_mrp/management-zone/CDmrp.id +- tag: mrp +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDmrp-INT-TEST: +- name: CD_mrp INT-TEST +- mzName: CD_mrp/management-zone/CDmrp.name +- mzId: CD_mrp/management-zone/CDmrp.id +- tag: mrp +- skipDeployment: "true" +#Configuration +CDmrp-INT-TEST.EMEA-PreProd: +- name: CD_mrp INT-TEST +- mzName: CD_mrp/management-zone/CDmrp.name +- mzId: CD_mrp/management-zone/CDmrp.id +- tag: mrp +- skipDeployment: "false" +CDmrp-INT-TEST.NA-PreProd: +- name: CD_mrp INT-TEST +- mzName: CD_mrp/management-zone/CDmrp.name +- mzId: CD_mrp/management-zone/CDmrp.id +- env: INT +- skipDeployment: "false" +CDmrp-INT-TEST.CN-PreProd: +- name: CD_mrp INT-TEST +- mzName: CD_mrp/management-zone/CDmrp.name +- mzId: CD_mrp/management-zone/CDmrp.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrp/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_mrp/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrp/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrp/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_mrp/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrp/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrp/management-zone/README.md b/BMW-Dynatrace-config/CD_mrp/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrp/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_mrp/management-zone/default.json b/BMW-Dynatrace-config/CD_mrp/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrp/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrp/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_mrp/management-zone/management-zone.yaml new file mode 100644 index 00000000..9544aa54 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrp/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDmrp: default.json + +CDmrp: +- name: CD_mrp +- tag: mrp diff --git a/BMW-Dynatrace-config/CD_mrp/notification/README.md b/BMW-Dynatrace-config/CD_mrp/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrp/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrp/notification/email.json b/BMW-Dynatrace-config/CD_mrp/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrp/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrp/notification/msTeams.json b/BMW-Dynatrace-config/CD_mrp/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrp/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrp/notification/notification.yaml b/BMW-Dynatrace-config/CD_mrp/notification/notification.yaml new file mode 100644 index 00000000..efb748cf --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrp/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDmrp-PROD: msTeams.json +- CDmrp-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDmrp-PROD: +- name: CD_mrp PROD +- alertingProfile: CD_mrp/alerting-profile/CDmrp-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDmrp-PROD.EMEA-Prod: +- name: CD_mrp PROD +- alertingProfile: CD_mrp/alerting-profile/CDmrp-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDmrp-PROD.NA-Prod: +- name: CD_mrp PROD +- alertingProfile: CD_mrp/alerting-profile/CDmrp-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDmrp-PROD.CN-Prod: +- name: CD_mrp PROD +- alertingProfile: CD_mrp/alerting-profile/CDmrp-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDmrp-INT: +- name: CD_mrp INT +- alertingProfile: CD_mrp/alerting-profile/CDmrp-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDmrp-INT.EMEA-PreProd: +- name: CD_mrp INT +- alertingProfile: CD_mrp/alerting-profile/CDmrp-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDmrp-INT.NA-PreProd: +- name: CD_mrp INT +- alertingProfile: CD_mrp/alerting-profile/CDmrp-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDmrp-INT.CN-PreProd: +- name: CD_mrp INT +- alertingProfile: CD_mrp/alerting-profile/CDmrp-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrp/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_mrp/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrp/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrp/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_mrp/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrp/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrp/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_mrp/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..899fdeae --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrp/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- mrp: default.json + +mrp: +- name: CD_mrp - +- mzName: CD_mrp/management-zone/CDmrp.name +- mzId: CD_mrp/management-zone/CDmrp.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrpspringboot/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_mrpspringboot/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..691b23ac --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrpspringboot/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDmrpspringboot-PROD: default.json +- CDmrpspringboot-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDmrpspringboot-PROD: +- name: CD_mrpspringboot PROD +- tag: mrpspringboot +- mzId: CD_mrpspringboot/management-zone/CDmrpspringboot.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDmrpspringboot-PROD.EMEA-Prod: +- name: CD_mrpspringboot PROD +- tag: mrpspringboot +- mzId: CD_mrpspringboot/management-zone/CDmrpspringboot.id +- env: PROD +- skipDeployment: "false" +CDmrpspringboot-PROD.NA-Prod: +- name: CD_mrpspringboot PROD +- tag: mrpspringboot +- mzId: CD_mrpspringboot/management-zone/CDmrpspringboot.id +- env: PROD +- skipDeployment: "false" +CDmrpspringboot-PROD.CN-Prod: +- name: CD_mrpspringboot PROD +- tag: mrpspringboot +- mzId: CD_mrpspringboot/management-zone/CDmrpspringboot.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDmrpspringboot-INT: +- name: CD_mrpspringboot INT +- tag: mrpspringboot +- mzId: CD_mrpspringboot/management-zone/CDmrpspringboot.id +- env: INT +- skipDeployment: "true" +#Configuration +CDmrpspringboot-INT.EMEA-PreProd: +- name: CD_mrpspringboot INT +- tag: mrpspringboot +- mzId: CD_mrpspringboot/management-zone/CDmrpspringboot.id +- env: INT +- skipDeployment: "false" +CDmrpspringboot-INT.NA-PreProd: +- name: CD_mrpspringboot INT +- tag: mrpspringboot +- mzId: CD_mrpspringboot/management-zone/CDmrpspringboot.id +- env: INT +- skipDeployment: "false" +CDmrpspringboot-INT.CN-PreProd: +- name: CD_mrpspringboot INT +- tag: mrpspringboot +- mzId: CD_mrpspringboot/management-zone/CDmrpspringboot.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrpspringboot/alerting-profile/default.json b/BMW-Dynatrace-config/CD_mrpspringboot/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrpspringboot/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrpspringboot/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_mrpspringboot/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrpspringboot/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrpspringboot/custom-service-java/README.md b/BMW-Dynatrace-config/CD_mrpspringboot/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrpspringboot/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrpspringboot/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_mrpspringboot/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrpspringboot/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrpspringboot/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_mrpspringboot/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrpspringboot/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrpspringboot/dashboard/README.md b/BMW-Dynatrace-config/CD_mrpspringboot/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrpspringboot/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrpspringboot/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_mrpspringboot/dashboard/dashboard.yaml new file mode 100644 index 00000000..afebfae5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrpspringboot/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDmrpspringboot-PROD-E2E: defaultPRODE2E.json +- CDmrpspringboot-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDmrpspringboot-PROD-E2E: +- name: CD_mrpspringboot PROD-E2E +- mzName: CD_mrpspringboot/management-zone/CDmrpspringboot.name +- mzId: CD_mrpspringboot/management-zone/CDmrpspringboot.id +- skipDeployment: "true" +#Configuration +CDmrpspringboot-PROD-E2E.EMEA-Prod: +- name: CD_mrpspringboot PROD-E2E +- mzName: CD_mrpspringboot/management-zone/CDmrpspringboot.name +- mzId: CD_mrpspringboot/management-zone/CDmrpspringboot.id +- tag: mrpspringboot +- skipDeployment: "false" +CDmrpspringboot-PROD-E2E.NA-Prod: +- name: CD_mrpspringboot PROD-E2E +- mzName: CD_mrpspringboot/management-zone/CDmrpspringboot.name +- mzId: CD_mrpspringboot/management-zone/CDmrpspringboot.id +- tag: mrpspringboot +- skipDeployment: "false" +CDmrpspringboot-PROD-E2E.CN-Prod: +- name: CD_mrpspringboot PROD-E2E +- mzName: CD_mrpspringboot/management-zone/CDmrpspringboot.name +- mzId: CD_mrpspringboot/management-zone/CDmrpspringboot.id +- tag: mrpspringboot +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDmrpspringboot-INT-TEST: +- name: CD_mrpspringboot INT-TEST +- mzName: CD_mrpspringboot/management-zone/CDmrpspringboot.name +- mzId: CD_mrpspringboot/management-zone/CDmrpspringboot.id +- tag: mrpspringboot +- skipDeployment: "true" +#Configuration +CDmrpspringboot-INT-TEST.EMEA-PreProd: +- name: CD_mrpspringboot INT-TEST +- mzName: CD_mrpspringboot/management-zone/CDmrpspringboot.name +- mzId: CD_mrpspringboot/management-zone/CDmrpspringboot.id +- tag: mrpspringboot +- skipDeployment: "false" +CDmrpspringboot-INT-TEST.NA-PreProd: +- name: CD_mrpspringboot INT-TEST +- mzName: CD_mrpspringboot/management-zone/CDmrpspringboot.name +- mzId: CD_mrpspringboot/management-zone/CDmrpspringboot.id +- env: INT +- skipDeployment: "false" +CDmrpspringboot-INT-TEST.CN-PreProd: +- name: CD_mrpspringboot INT-TEST +- mzName: CD_mrpspringboot/management-zone/CDmrpspringboot.name +- mzId: CD_mrpspringboot/management-zone/CDmrpspringboot.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrpspringboot/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_mrpspringboot/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrpspringboot/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrpspringboot/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_mrpspringboot/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrpspringboot/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrpspringboot/management-zone/README.md b/BMW-Dynatrace-config/CD_mrpspringboot/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrpspringboot/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_mrpspringboot/management-zone/default.json b/BMW-Dynatrace-config/CD_mrpspringboot/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrpspringboot/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrpspringboot/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_mrpspringboot/management-zone/management-zone.yaml new file mode 100644 index 00000000..584dc292 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrpspringboot/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDmrpspringboot: default.json + +CDmrpspringboot: +- name: CD_mrpspringboot +- tag: mrpspringboot diff --git a/BMW-Dynatrace-config/CD_mrpspringboot/notification/README.md b/BMW-Dynatrace-config/CD_mrpspringboot/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrpspringboot/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrpspringboot/notification/email.json b/BMW-Dynatrace-config/CD_mrpspringboot/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrpspringboot/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrpspringboot/notification/msTeams.json b/BMW-Dynatrace-config/CD_mrpspringboot/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrpspringboot/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrpspringboot/notification/notification.yaml b/BMW-Dynatrace-config/CD_mrpspringboot/notification/notification.yaml new file mode 100644 index 00000000..8a876524 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrpspringboot/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDmrpspringboot-PROD: msTeams.json +- CDmrpspringboot-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDmrpspringboot-PROD: +- name: CD_mrpspringboot PROD +- alertingProfile: CD_mrpspringboot/alerting-profile/CDmrpspringboot-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDmrpspringboot-PROD.EMEA-Prod: +- name: CD_mrpspringboot PROD +- alertingProfile: CD_mrpspringboot/alerting-profile/CDmrpspringboot-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDmrpspringboot-PROD.NA-Prod: +- name: CD_mrpspringboot PROD +- alertingProfile: CD_mrpspringboot/alerting-profile/CDmrpspringboot-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDmrpspringboot-PROD.CN-Prod: +- name: CD_mrpspringboot PROD +- alertingProfile: CD_mrpspringboot/alerting-profile/CDmrpspringboot-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDmrpspringboot-INT: +- name: CD_mrpspringboot INT +- alertingProfile: CD_mrpspringboot/alerting-profile/CDmrpspringboot-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDmrpspringboot-INT.EMEA-PreProd: +- name: CD_mrpspringboot INT +- alertingProfile: CD_mrpspringboot/alerting-profile/CDmrpspringboot-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDmrpspringboot-INT.NA-PreProd: +- name: CD_mrpspringboot INT +- alertingProfile: CD_mrpspringboot/alerting-profile/CDmrpspringboot-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDmrpspringboot-INT.CN-PreProd: +- name: CD_mrpspringboot INT +- alertingProfile: CD_mrpspringboot/alerting-profile/CDmrpspringboot-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrpspringboot/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_mrpspringboot/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrpspringboot/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrpspringboot/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_mrpspringboot/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrpspringboot/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrpspringboot/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_mrpspringboot/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..804305c4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrpspringboot/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- mrpspringboot: default.json + +mrpspringboot: +- name: CD_mrpspringboot - +- mzName: CD_mrpspringboot/management-zone/CDmrpspringboot.name +- mzId: CD_mrpspringboot/management-zone/CDmrpspringboot.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-admin/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_nop-admin/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..fc2c5271 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-admin/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDnop-admin-PROD: default.json +- CDnop-admin-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDnop-admin-PROD: +- name: CD_nop-admin PROD +- tag: nop-admin +- mzId: CD_nop-admin/management-zone/CDnop-admin.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDnop-admin-PROD.EMEA-Prod: +- name: CD_nop-admin PROD +- tag: nop-admin +- mzId: CD_nop-admin/management-zone/CDnop-admin.id +- env: PROD +- skipDeployment: "false" +CDnop-admin-PROD.NA-Prod: +- name: CD_nop-admin PROD +- tag: nop-admin +- mzId: CD_nop-admin/management-zone/CDnop-admin.id +- env: PROD +- skipDeployment: "false" +CDnop-admin-PROD.CN-Prod: +- name: CD_nop-admin PROD +- tag: nop-admin +- mzId: CD_nop-admin/management-zone/CDnop-admin.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDnop-admin-INT: +- name: CD_nop-admin INT +- tag: nop-admin +- mzId: CD_nop-admin/management-zone/CDnop-admin.id +- env: INT +- skipDeployment: "true" +#Configuration +CDnop-admin-INT.EMEA-PreProd: +- name: CD_nop-admin INT +- tag: nop-admin +- mzId: CD_nop-admin/management-zone/CDnop-admin.id +- env: INT +- skipDeployment: "false" +CDnop-admin-INT.NA-PreProd: +- name: CD_nop-admin INT +- tag: nop-admin +- mzId: CD_nop-admin/management-zone/CDnop-admin.id +- env: INT +- skipDeployment: "false" +CDnop-admin-INT.CN-PreProd: +- name: CD_nop-admin INT +- tag: nop-admin +- mzId: CD_nop-admin/management-zone/CDnop-admin.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-admin/alerting-profile/default.json b/BMW-Dynatrace-config/CD_nop-admin/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-admin/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-admin/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_nop-admin/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-admin/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-admin/custom-service-java/README.md b/BMW-Dynatrace-config/CD_nop-admin/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-admin/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-admin/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_nop-admin/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-admin/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-admin/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_nop-admin/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-admin/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-admin/dashboard/README.md b/BMW-Dynatrace-config/CD_nop-admin/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-admin/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-admin/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_nop-admin/dashboard/dashboard.yaml new file mode 100644 index 00000000..398f43d2 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-admin/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDnop-admin-PROD-E2E: defaultPRODE2E.json +- CDnop-admin-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDnop-admin-PROD-E2E: +- name: CD_nop-admin PROD-E2E +- mzName: CD_nop-admin/management-zone/CDnop-admin.name +- mzId: CD_nop-admin/management-zone/CDnop-admin.id +- skipDeployment: "true" +#Configuration +CDnop-admin-PROD-E2E.EMEA-Prod: +- name: CD_nop-admin PROD-E2E +- mzName: CD_nop-admin/management-zone/CDnop-admin.name +- mzId: CD_nop-admin/management-zone/CDnop-admin.id +- tag: nop-admin +- skipDeployment: "false" +CDnop-admin-PROD-E2E.NA-Prod: +- name: CD_nop-admin PROD-E2E +- mzName: CD_nop-admin/management-zone/CDnop-admin.name +- mzId: CD_nop-admin/management-zone/CDnop-admin.id +- tag: nop-admin +- skipDeployment: "false" +CDnop-admin-PROD-E2E.CN-Prod: +- name: CD_nop-admin PROD-E2E +- mzName: CD_nop-admin/management-zone/CDnop-admin.name +- mzId: CD_nop-admin/management-zone/CDnop-admin.id +- tag: nop-admin +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDnop-admin-INT-TEST: +- name: CD_nop-admin INT-TEST +- mzName: CD_nop-admin/management-zone/CDnop-admin.name +- mzId: CD_nop-admin/management-zone/CDnop-admin.id +- tag: nop-admin +- skipDeployment: "true" +#Configuration +CDnop-admin-INT-TEST.EMEA-PreProd: +- name: CD_nop-admin INT-TEST +- mzName: CD_nop-admin/management-zone/CDnop-admin.name +- mzId: CD_nop-admin/management-zone/CDnop-admin.id +- tag: nop-admin +- skipDeployment: "false" +CDnop-admin-INT-TEST.NA-PreProd: +- name: CD_nop-admin INT-TEST +- mzName: CD_nop-admin/management-zone/CDnop-admin.name +- mzId: CD_nop-admin/management-zone/CDnop-admin.id +- env: INT +- skipDeployment: "false" +CDnop-admin-INT-TEST.CN-PreProd: +- name: CD_nop-admin INT-TEST +- mzName: CD_nop-admin/management-zone/CDnop-admin.name +- mzId: CD_nop-admin/management-zone/CDnop-admin.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-admin/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_nop-admin/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-admin/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-admin/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_nop-admin/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-admin/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-admin/management-zone/README.md b/BMW-Dynatrace-config/CD_nop-admin/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-admin/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_nop-admin/management-zone/default.json b/BMW-Dynatrace-config/CD_nop-admin/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-admin/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-admin/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_nop-admin/management-zone/management-zone.yaml new file mode 100644 index 00000000..f64fc2b1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-admin/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDnop-admin: default.json + +CDnop-admin: +- name: CD_nop-admin +- tag: nop-admin diff --git a/BMW-Dynatrace-config/CD_nop-admin/notification/README.md b/BMW-Dynatrace-config/CD_nop-admin/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-admin/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-admin/notification/email.json b/BMW-Dynatrace-config/CD_nop-admin/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-admin/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-admin/notification/msTeams.json b/BMW-Dynatrace-config/CD_nop-admin/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-admin/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-admin/notification/notification.yaml b/BMW-Dynatrace-config/CD_nop-admin/notification/notification.yaml new file mode 100644 index 00000000..6792fb02 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-admin/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDnop-admin-PROD: msTeams.json +- CDnop-admin-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDnop-admin-PROD: +- name: CD_nop-admin PROD +- alertingProfile: CD_nop-admin/alerting-profile/CDnop-admin-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDnop-admin-PROD.EMEA-Prod: +- name: CD_nop-admin PROD +- alertingProfile: CD_nop-admin/alerting-profile/CDnop-admin-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDnop-admin-PROD.NA-Prod: +- name: CD_nop-admin PROD +- alertingProfile: CD_nop-admin/alerting-profile/CDnop-admin-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDnop-admin-PROD.CN-Prod: +- name: CD_nop-admin PROD +- alertingProfile: CD_nop-admin/alerting-profile/CDnop-admin-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDnop-admin-INT: +- name: CD_nop-admin INT +- alertingProfile: CD_nop-admin/alerting-profile/CDnop-admin-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDnop-admin-INT.EMEA-PreProd: +- name: CD_nop-admin INT +- alertingProfile: CD_nop-admin/alerting-profile/CDnop-admin-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDnop-admin-INT.NA-PreProd: +- name: CD_nop-admin INT +- alertingProfile: CD_nop-admin/alerting-profile/CDnop-admin-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDnop-admin-INT.CN-PreProd: +- name: CD_nop-admin INT +- alertingProfile: CD_nop-admin/alerting-profile/CDnop-admin-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-admin/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_nop-admin/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-admin/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-admin/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_nop-admin/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-admin/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-admin/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_nop-admin/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..eeb680ec --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-admin/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- nop-admin: default.json + +nop-admin: +- name: CD_nop-admin - +- mzName: CD_nop-admin/management-zone/CDnop-admin.name +- mzId: CD_nop-admin/management-zone/CDnop-admin.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-archive/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_nop-archive/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..1d236b52 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-archive/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDnop-archive-PROD: default.json +- CDnop-archive-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDnop-archive-PROD: +- name: CD_nop-archive PROD +- tag: nop-archive +- mzId: CD_nop-archive/management-zone/CDnop-archive.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDnop-archive-PROD.EMEA-Prod: +- name: CD_nop-archive PROD +- tag: nop-archive +- mzId: CD_nop-archive/management-zone/CDnop-archive.id +- env: PROD +- skipDeployment: "false" +CDnop-archive-PROD.NA-Prod: +- name: CD_nop-archive PROD +- tag: nop-archive +- mzId: CD_nop-archive/management-zone/CDnop-archive.id +- env: PROD +- skipDeployment: "false" +CDnop-archive-PROD.CN-Prod: +- name: CD_nop-archive PROD +- tag: nop-archive +- mzId: CD_nop-archive/management-zone/CDnop-archive.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDnop-archive-INT: +- name: CD_nop-archive INT +- tag: nop-archive +- mzId: CD_nop-archive/management-zone/CDnop-archive.id +- env: INT +- skipDeployment: "true" +#Configuration +CDnop-archive-INT.EMEA-PreProd: +- name: CD_nop-archive INT +- tag: nop-archive +- mzId: CD_nop-archive/management-zone/CDnop-archive.id +- env: INT +- skipDeployment: "false" +CDnop-archive-INT.NA-PreProd: +- name: CD_nop-archive INT +- tag: nop-archive +- mzId: CD_nop-archive/management-zone/CDnop-archive.id +- env: INT +- skipDeployment: "false" +CDnop-archive-INT.CN-PreProd: +- name: CD_nop-archive INT +- tag: nop-archive +- mzId: CD_nop-archive/management-zone/CDnop-archive.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-archive/alerting-profile/default.json b/BMW-Dynatrace-config/CD_nop-archive/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-archive/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-archive/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_nop-archive/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-archive/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-archive/custom-service-java/README.md b/BMW-Dynatrace-config/CD_nop-archive/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-archive/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-archive/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_nop-archive/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-archive/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-archive/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_nop-archive/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-archive/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-archive/dashboard/README.md b/BMW-Dynatrace-config/CD_nop-archive/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-archive/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-archive/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_nop-archive/dashboard/dashboard.yaml new file mode 100644 index 00000000..8f7c2d84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-archive/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDnop-archive-PROD-E2E: defaultPRODE2E.json +- CDnop-archive-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDnop-archive-PROD-E2E: +- name: CD_nop-archive PROD-E2E +- mzName: CD_nop-archive/management-zone/CDnop-archive.name +- mzId: CD_nop-archive/management-zone/CDnop-archive.id +- skipDeployment: "true" +#Configuration +CDnop-archive-PROD-E2E.EMEA-Prod: +- name: CD_nop-archive PROD-E2E +- mzName: CD_nop-archive/management-zone/CDnop-archive.name +- mzId: CD_nop-archive/management-zone/CDnop-archive.id +- tag: nop-archive +- skipDeployment: "false" +CDnop-archive-PROD-E2E.NA-Prod: +- name: CD_nop-archive PROD-E2E +- mzName: CD_nop-archive/management-zone/CDnop-archive.name +- mzId: CD_nop-archive/management-zone/CDnop-archive.id +- tag: nop-archive +- skipDeployment: "false" +CDnop-archive-PROD-E2E.CN-Prod: +- name: CD_nop-archive PROD-E2E +- mzName: CD_nop-archive/management-zone/CDnop-archive.name +- mzId: CD_nop-archive/management-zone/CDnop-archive.id +- tag: nop-archive +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDnop-archive-INT-TEST: +- name: CD_nop-archive INT-TEST +- mzName: CD_nop-archive/management-zone/CDnop-archive.name +- mzId: CD_nop-archive/management-zone/CDnop-archive.id +- tag: nop-archive +- skipDeployment: "true" +#Configuration +CDnop-archive-INT-TEST.EMEA-PreProd: +- name: CD_nop-archive INT-TEST +- mzName: CD_nop-archive/management-zone/CDnop-archive.name +- mzId: CD_nop-archive/management-zone/CDnop-archive.id +- tag: nop-archive +- skipDeployment: "false" +CDnop-archive-INT-TEST.NA-PreProd: +- name: CD_nop-archive INT-TEST +- mzName: CD_nop-archive/management-zone/CDnop-archive.name +- mzId: CD_nop-archive/management-zone/CDnop-archive.id +- env: INT +- skipDeployment: "false" +CDnop-archive-INT-TEST.CN-PreProd: +- name: CD_nop-archive INT-TEST +- mzName: CD_nop-archive/management-zone/CDnop-archive.name +- mzId: CD_nop-archive/management-zone/CDnop-archive.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-archive/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_nop-archive/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-archive/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-archive/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_nop-archive/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-archive/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-archive/management-zone/README.md b/BMW-Dynatrace-config/CD_nop-archive/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-archive/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_nop-archive/management-zone/default.json b/BMW-Dynatrace-config/CD_nop-archive/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-archive/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-archive/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_nop-archive/management-zone/management-zone.yaml new file mode 100644 index 00000000..12f62b04 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-archive/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDnop-archive: default.json + +CDnop-archive: +- name: CD_nop-archive +- tag: nop-archive diff --git a/BMW-Dynatrace-config/CD_nop-archive/notification/README.md b/BMW-Dynatrace-config/CD_nop-archive/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-archive/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-archive/notification/email.json b/BMW-Dynatrace-config/CD_nop-archive/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-archive/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-archive/notification/msTeams.json b/BMW-Dynatrace-config/CD_nop-archive/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-archive/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-archive/notification/notification.yaml b/BMW-Dynatrace-config/CD_nop-archive/notification/notification.yaml new file mode 100644 index 00000000..a0847f51 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-archive/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDnop-archive-PROD: msTeams.json +- CDnop-archive-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDnop-archive-PROD: +- name: CD_nop-archive PROD +- alertingProfile: CD_nop-archive/alerting-profile/CDnop-archive-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDnop-archive-PROD.EMEA-Prod: +- name: CD_nop-archive PROD +- alertingProfile: CD_nop-archive/alerting-profile/CDnop-archive-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDnop-archive-PROD.NA-Prod: +- name: CD_nop-archive PROD +- alertingProfile: CD_nop-archive/alerting-profile/CDnop-archive-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDnop-archive-PROD.CN-Prod: +- name: CD_nop-archive PROD +- alertingProfile: CD_nop-archive/alerting-profile/CDnop-archive-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDnop-archive-INT: +- name: CD_nop-archive INT +- alertingProfile: CD_nop-archive/alerting-profile/CDnop-archive-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDnop-archive-INT.EMEA-PreProd: +- name: CD_nop-archive INT +- alertingProfile: CD_nop-archive/alerting-profile/CDnop-archive-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDnop-archive-INT.NA-PreProd: +- name: CD_nop-archive INT +- alertingProfile: CD_nop-archive/alerting-profile/CDnop-archive-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDnop-archive-INT.CN-PreProd: +- name: CD_nop-archive INT +- alertingProfile: CD_nop-archive/alerting-profile/CDnop-archive-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-archive/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_nop-archive/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-archive/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-archive/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_nop-archive/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-archive/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-archive/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_nop-archive/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..ec572928 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-archive/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- nop-archive: default.json + +nop-archive: +- name: CD_nop-archive - +- mzName: CD_nop-archive/management-zone/CDnop-archive.name +- mzId: CD_nop-archive/management-zone/CDnop-archive.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-provisioning/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_nop-provisioning/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..2852fe8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-provisioning/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDnop-provisioning-PROD: default.json +- CDnop-provisioning-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDnop-provisioning-PROD: +- name: CD_nop-provisioning PROD +- tag: nop-provisioning +- mzId: CD_nop-provisioning/management-zone/CDnop-provisioning.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDnop-provisioning-PROD.EMEA-Prod: +- name: CD_nop-provisioning PROD +- tag: nop-provisioning +- mzId: CD_nop-provisioning/management-zone/CDnop-provisioning.id +- env: PROD +- skipDeployment: "false" +CDnop-provisioning-PROD.NA-Prod: +- name: CD_nop-provisioning PROD +- tag: nop-provisioning +- mzId: CD_nop-provisioning/management-zone/CDnop-provisioning.id +- env: PROD +- skipDeployment: "false" +CDnop-provisioning-PROD.CN-Prod: +- name: CD_nop-provisioning PROD +- tag: nop-provisioning +- mzId: CD_nop-provisioning/management-zone/CDnop-provisioning.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDnop-provisioning-INT: +- name: CD_nop-provisioning INT +- tag: nop-provisioning +- mzId: CD_nop-provisioning/management-zone/CDnop-provisioning.id +- env: INT +- skipDeployment: "true" +#Configuration +CDnop-provisioning-INT.EMEA-PreProd: +- name: CD_nop-provisioning INT +- tag: nop-provisioning +- mzId: CD_nop-provisioning/management-zone/CDnop-provisioning.id +- env: INT +- skipDeployment: "false" +CDnop-provisioning-INT.NA-PreProd: +- name: CD_nop-provisioning INT +- tag: nop-provisioning +- mzId: CD_nop-provisioning/management-zone/CDnop-provisioning.id +- env: INT +- skipDeployment: "false" +CDnop-provisioning-INT.CN-PreProd: +- name: CD_nop-provisioning INT +- tag: nop-provisioning +- mzId: CD_nop-provisioning/management-zone/CDnop-provisioning.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-provisioning/alerting-profile/default.json b/BMW-Dynatrace-config/CD_nop-provisioning/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-provisioning/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-provisioning/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_nop-provisioning/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-provisioning/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-provisioning/custom-service-java/README.md b/BMW-Dynatrace-config/CD_nop-provisioning/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-provisioning/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-provisioning/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_nop-provisioning/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-provisioning/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-provisioning/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_nop-provisioning/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-provisioning/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-provisioning/dashboard/README.md b/BMW-Dynatrace-config/CD_nop-provisioning/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-provisioning/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-provisioning/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_nop-provisioning/dashboard/dashboard.yaml new file mode 100644 index 00000000..40148887 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-provisioning/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDnop-provisioning-PROD-E2E: defaultPRODE2E.json +- CDnop-provisioning-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDnop-provisioning-PROD-E2E: +- name: CD_nop-provisioning PROD-E2E +- mzName: CD_nop-provisioning/management-zone/CDnop-provisioning.name +- mzId: CD_nop-provisioning/management-zone/CDnop-provisioning.id +- skipDeployment: "true" +#Configuration +CDnop-provisioning-PROD-E2E.EMEA-Prod: +- name: CD_nop-provisioning PROD-E2E +- mzName: CD_nop-provisioning/management-zone/CDnop-provisioning.name +- mzId: CD_nop-provisioning/management-zone/CDnop-provisioning.id +- tag: nop-provisioning +- skipDeployment: "false" +CDnop-provisioning-PROD-E2E.NA-Prod: +- name: CD_nop-provisioning PROD-E2E +- mzName: CD_nop-provisioning/management-zone/CDnop-provisioning.name +- mzId: CD_nop-provisioning/management-zone/CDnop-provisioning.id +- tag: nop-provisioning +- skipDeployment: "false" +CDnop-provisioning-PROD-E2E.CN-Prod: +- name: CD_nop-provisioning PROD-E2E +- mzName: CD_nop-provisioning/management-zone/CDnop-provisioning.name +- mzId: CD_nop-provisioning/management-zone/CDnop-provisioning.id +- tag: nop-provisioning +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDnop-provisioning-INT-TEST: +- name: CD_nop-provisioning INT-TEST +- mzName: CD_nop-provisioning/management-zone/CDnop-provisioning.name +- mzId: CD_nop-provisioning/management-zone/CDnop-provisioning.id +- tag: nop-provisioning +- skipDeployment: "true" +#Configuration +CDnop-provisioning-INT-TEST.EMEA-PreProd: +- name: CD_nop-provisioning INT-TEST +- mzName: CD_nop-provisioning/management-zone/CDnop-provisioning.name +- mzId: CD_nop-provisioning/management-zone/CDnop-provisioning.id +- tag: nop-provisioning +- skipDeployment: "false" +CDnop-provisioning-INT-TEST.NA-PreProd: +- name: CD_nop-provisioning INT-TEST +- mzName: CD_nop-provisioning/management-zone/CDnop-provisioning.name +- mzId: CD_nop-provisioning/management-zone/CDnop-provisioning.id +- env: INT +- skipDeployment: "false" +CDnop-provisioning-INT-TEST.CN-PreProd: +- name: CD_nop-provisioning INT-TEST +- mzName: CD_nop-provisioning/management-zone/CDnop-provisioning.name +- mzId: CD_nop-provisioning/management-zone/CDnop-provisioning.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-provisioning/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_nop-provisioning/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-provisioning/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-provisioning/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_nop-provisioning/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-provisioning/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-provisioning/management-zone/README.md b/BMW-Dynatrace-config/CD_nop-provisioning/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-provisioning/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_nop-provisioning/management-zone/default.json b/BMW-Dynatrace-config/CD_nop-provisioning/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-provisioning/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-provisioning/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_nop-provisioning/management-zone/management-zone.yaml new file mode 100644 index 00000000..9b9092f2 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-provisioning/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDnop-provisioning: default.json + +CDnop-provisioning: +- name: CD_nop-provisioning +- tag: nop-provisioning diff --git a/BMW-Dynatrace-config/CD_nop-provisioning/notification/README.md b/BMW-Dynatrace-config/CD_nop-provisioning/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-provisioning/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-provisioning/notification/email.json b/BMW-Dynatrace-config/CD_nop-provisioning/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-provisioning/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-provisioning/notification/msTeams.json b/BMW-Dynatrace-config/CD_nop-provisioning/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-provisioning/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-provisioning/notification/notification.yaml b/BMW-Dynatrace-config/CD_nop-provisioning/notification/notification.yaml new file mode 100644 index 00000000..abd2f5ad --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-provisioning/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDnop-provisioning-PROD: msTeams.json +- CDnop-provisioning-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDnop-provisioning-PROD: +- name: CD_nop-provisioning PROD +- alertingProfile: CD_nop-provisioning/alerting-profile/CDnop-provisioning-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDnop-provisioning-PROD.EMEA-Prod: +- name: CD_nop-provisioning PROD +- alertingProfile: CD_nop-provisioning/alerting-profile/CDnop-provisioning-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDnop-provisioning-PROD.NA-Prod: +- name: CD_nop-provisioning PROD +- alertingProfile: CD_nop-provisioning/alerting-profile/CDnop-provisioning-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDnop-provisioning-PROD.CN-Prod: +- name: CD_nop-provisioning PROD +- alertingProfile: CD_nop-provisioning/alerting-profile/CDnop-provisioning-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDnop-provisioning-INT: +- name: CD_nop-provisioning INT +- alertingProfile: CD_nop-provisioning/alerting-profile/CDnop-provisioning-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDnop-provisioning-INT.EMEA-PreProd: +- name: CD_nop-provisioning INT +- alertingProfile: CD_nop-provisioning/alerting-profile/CDnop-provisioning-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDnop-provisioning-INT.NA-PreProd: +- name: CD_nop-provisioning INT +- alertingProfile: CD_nop-provisioning/alerting-profile/CDnop-provisioning-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDnop-provisioning-INT.CN-PreProd: +- name: CD_nop-provisioning INT +- alertingProfile: CD_nop-provisioning/alerting-profile/CDnop-provisioning-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-provisioning/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_nop-provisioning/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-provisioning/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-provisioning/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_nop-provisioning/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-provisioning/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-provisioning/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_nop-provisioning/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..0508f746 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-provisioning/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- nop-provisioning: default.json + +nop-provisioning: +- name: CD_nop-provisioning - +- mzName: CD_nop-provisioning/management-zone/CDnop-provisioning.name +- mzId: CD_nop-provisioning/management-zone/CDnop-provisioning.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-trigger/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_nop-trigger/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..94630375 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-trigger/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDnop-trigger-PROD: default.json +- CDnop-trigger-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDnop-trigger-PROD: +- name: CD_nop-trigger PROD +- tag: nop-trigger +- mzId: CD_nop-trigger/management-zone/CDnop-trigger.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDnop-trigger-PROD.EMEA-Prod: +- name: CD_nop-trigger PROD +- tag: nop-trigger +- mzId: CD_nop-trigger/management-zone/CDnop-trigger.id +- env: PROD +- skipDeployment: "false" +CDnop-trigger-PROD.NA-Prod: +- name: CD_nop-trigger PROD +- tag: nop-trigger +- mzId: CD_nop-trigger/management-zone/CDnop-trigger.id +- env: PROD +- skipDeployment: "false" +CDnop-trigger-PROD.CN-Prod: +- name: CD_nop-trigger PROD +- tag: nop-trigger +- mzId: CD_nop-trigger/management-zone/CDnop-trigger.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDnop-trigger-INT: +- name: CD_nop-trigger INT +- tag: nop-trigger +- mzId: CD_nop-trigger/management-zone/CDnop-trigger.id +- env: INT +- skipDeployment: "true" +#Configuration +CDnop-trigger-INT.EMEA-PreProd: +- name: CD_nop-trigger INT +- tag: nop-trigger +- mzId: CD_nop-trigger/management-zone/CDnop-trigger.id +- env: INT +- skipDeployment: "false" +CDnop-trigger-INT.NA-PreProd: +- name: CD_nop-trigger INT +- tag: nop-trigger +- mzId: CD_nop-trigger/management-zone/CDnop-trigger.id +- env: INT +- skipDeployment: "false" +CDnop-trigger-INT.CN-PreProd: +- name: CD_nop-trigger INT +- tag: nop-trigger +- mzId: CD_nop-trigger/management-zone/CDnop-trigger.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-trigger/alerting-profile/default.json b/BMW-Dynatrace-config/CD_nop-trigger/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-trigger/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-trigger/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_nop-trigger/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-trigger/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-trigger/custom-service-java/README.md b/BMW-Dynatrace-config/CD_nop-trigger/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-trigger/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-trigger/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_nop-trigger/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-trigger/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-trigger/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_nop-trigger/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-trigger/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-trigger/dashboard/README.md b/BMW-Dynatrace-config/CD_nop-trigger/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-trigger/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-trigger/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_nop-trigger/dashboard/dashboard.yaml new file mode 100644 index 00000000..124ba358 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-trigger/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDnop-trigger-PROD-E2E: defaultPRODE2E.json +- CDnop-trigger-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDnop-trigger-PROD-E2E: +- name: CD_nop-trigger PROD-E2E +- mzName: CD_nop-trigger/management-zone/CDnop-trigger.name +- mzId: CD_nop-trigger/management-zone/CDnop-trigger.id +- skipDeployment: "true" +#Configuration +CDnop-trigger-PROD-E2E.EMEA-Prod: +- name: CD_nop-trigger PROD-E2E +- mzName: CD_nop-trigger/management-zone/CDnop-trigger.name +- mzId: CD_nop-trigger/management-zone/CDnop-trigger.id +- tag: nop-trigger +- skipDeployment: "false" +CDnop-trigger-PROD-E2E.NA-Prod: +- name: CD_nop-trigger PROD-E2E +- mzName: CD_nop-trigger/management-zone/CDnop-trigger.name +- mzId: CD_nop-trigger/management-zone/CDnop-trigger.id +- tag: nop-trigger +- skipDeployment: "false" +CDnop-trigger-PROD-E2E.CN-Prod: +- name: CD_nop-trigger PROD-E2E +- mzName: CD_nop-trigger/management-zone/CDnop-trigger.name +- mzId: CD_nop-trigger/management-zone/CDnop-trigger.id +- tag: nop-trigger +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDnop-trigger-INT-TEST: +- name: CD_nop-trigger INT-TEST +- mzName: CD_nop-trigger/management-zone/CDnop-trigger.name +- mzId: CD_nop-trigger/management-zone/CDnop-trigger.id +- tag: nop-trigger +- skipDeployment: "true" +#Configuration +CDnop-trigger-INT-TEST.EMEA-PreProd: +- name: CD_nop-trigger INT-TEST +- mzName: CD_nop-trigger/management-zone/CDnop-trigger.name +- mzId: CD_nop-trigger/management-zone/CDnop-trigger.id +- tag: nop-trigger +- skipDeployment: "false" +CDnop-trigger-INT-TEST.NA-PreProd: +- name: CD_nop-trigger INT-TEST +- mzName: CD_nop-trigger/management-zone/CDnop-trigger.name +- mzId: CD_nop-trigger/management-zone/CDnop-trigger.id +- env: INT +- skipDeployment: "false" +CDnop-trigger-INT-TEST.CN-PreProd: +- name: CD_nop-trigger INT-TEST +- mzName: CD_nop-trigger/management-zone/CDnop-trigger.name +- mzId: CD_nop-trigger/management-zone/CDnop-trigger.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-trigger/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_nop-trigger/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-trigger/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-trigger/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_nop-trigger/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-trigger/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-trigger/management-zone/README.md b/BMW-Dynatrace-config/CD_nop-trigger/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-trigger/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_nop-trigger/management-zone/default.json b/BMW-Dynatrace-config/CD_nop-trigger/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-trigger/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-trigger/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_nop-trigger/management-zone/management-zone.yaml new file mode 100644 index 00000000..fee33172 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-trigger/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDnop-trigger: default.json + +CDnop-trigger: +- name: CD_nop-trigger +- tag: nop-trigger diff --git a/BMW-Dynatrace-config/CD_nop-trigger/notification/README.md b/BMW-Dynatrace-config/CD_nop-trigger/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-trigger/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-trigger/notification/email.json b/BMW-Dynatrace-config/CD_nop-trigger/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-trigger/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-trigger/notification/msTeams.json b/BMW-Dynatrace-config/CD_nop-trigger/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-trigger/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-trigger/notification/notification.yaml b/BMW-Dynatrace-config/CD_nop-trigger/notification/notification.yaml new file mode 100644 index 00000000..7da2aa80 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-trigger/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDnop-trigger-PROD: msTeams.json +- CDnop-trigger-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDnop-trigger-PROD: +- name: CD_nop-trigger PROD +- alertingProfile: CD_nop-trigger/alerting-profile/CDnop-trigger-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDnop-trigger-PROD.EMEA-Prod: +- name: CD_nop-trigger PROD +- alertingProfile: CD_nop-trigger/alerting-profile/CDnop-trigger-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDnop-trigger-PROD.NA-Prod: +- name: CD_nop-trigger PROD +- alertingProfile: CD_nop-trigger/alerting-profile/CDnop-trigger-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDnop-trigger-PROD.CN-Prod: +- name: CD_nop-trigger PROD +- alertingProfile: CD_nop-trigger/alerting-profile/CDnop-trigger-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDnop-trigger-INT: +- name: CD_nop-trigger INT +- alertingProfile: CD_nop-trigger/alerting-profile/CDnop-trigger-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDnop-trigger-INT.EMEA-PreProd: +- name: CD_nop-trigger INT +- alertingProfile: CD_nop-trigger/alerting-profile/CDnop-trigger-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDnop-trigger-INT.NA-PreProd: +- name: CD_nop-trigger INT +- alertingProfile: CD_nop-trigger/alerting-profile/CDnop-trigger-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDnop-trigger-INT.CN-PreProd: +- name: CD_nop-trigger INT +- alertingProfile: CD_nop-trigger/alerting-profile/CDnop-trigger-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-trigger/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_nop-trigger/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-trigger/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-trigger/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_nop-trigger/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-trigger/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-trigger/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_nop-trigger/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..ac1872d5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-trigger/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- nop-trigger: default.json + +nop-trigger: +- name: CD_nop-trigger - +- mzName: CD_nop-trigger/management-zone/CDnop-trigger.name +- mzId: CD_nop-trigger/management-zone/CDnop-trigger.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-composite-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_notification-composite-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..cfa54692 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-composite-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDnotification-composite-service-PROD: default.json +- CDnotification-composite-service-E2E: default.json +- CDnotification-composite-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDnotification-composite-service-PROD: +- name: CD_notification-composite-service PROD +- tag: notification-composite-service +- mzId: CD_notification-composite-service/management-zone/CDnotification-composite-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDnotification-composite-service-PROD.EMEA-Prod: +- name: CD_notification-composite-service PROD +- tag: notification-composite-service +- mzId: CD_notification-composite-service/management-zone/CDnotification-composite-service.id +- env: PROD +- skipDeployment: "false" +CDnotification-composite-service-PROD.NA-Prod: +- name: CD_notification-composite-service PROD +- tag: notification-composite-service +- mzId: CD_notification-composite-service/management-zone/CDnotification-composite-service.id +- env: PROD +- skipDeployment: "false" +CDnotification-composite-service-PROD.CN-Prod: +- name: CD_notification-composite-service PROD +- tag: notification-composite-service +- mzId: CD_notification-composite-service/management-zone/CDnotification-composite-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDnotification-composite-service-E2E: +- name: CD_notification-composite-service E2E +- tag: notification-composite-service +- mzId: CD_notification-composite-service/management-zone/CDnotification-composite-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDnotification-composite-service-E2E.EMEA-Prod: +- name: CD_notification-composite-service E2E +- tag: notification-composite-service +- mzId: CD_notification-composite-service/management-zone/CDnotification-composite-service.id +- env: E2E +- skipDeployment: "false" +CDnotification-composite-service-E2E.NA-Prod: +- name: CD_notification-composite-service E2E +- tag: notification-composite-service +- mzId: CD_notification-composite-service/management-zone/CDnotification-composite-service.id +- env: E2E +- skipDeployment: "false" +CDnotification-composite-service-E2E.CN-Prod: +- name: CD_notification-composite-service E2E +- tag: notification-composite-service +- mzId: CD_notification-composite-service/management-zone/CDnotification-composite-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDnotification-composite-service-INT: +- name: CD_notification-composite-service INT +- tag: notification-composite-service +- mzId: CD_notification-composite-service/management-zone/CDnotification-composite-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDnotification-composite-service-INT.EMEA-PreProd: +- name: CD_notification-composite-service INT +- tag: notification-composite-service +- mzId: CD_notification-composite-service/management-zone/CDnotification-composite-service.id +- env: INT +- skipDeployment: "false" +CDnotification-composite-service-INT.NA-PreProd: +- name: CD_notification-composite-service INT +- tag: notification-composite-service +- mzId: CD_notification-composite-service/management-zone/CDnotification-composite-service.id +- env: INT +- skipDeployment: "false" +CDnotification-composite-service-INT.CN-PreProd: +- name: CD_notification-composite-service INT +- tag: notification-composite-service +- mzId: CD_notification-composite-service/management-zone/CDnotification-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-composite-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_notification-composite-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-composite-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-composite-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_notification-composite-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-composite-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-composite-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_notification-composite-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-composite-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-composite-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_notification-composite-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-composite-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-composite-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_notification-composite-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-composite-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-composite-service/dashboard/README.md b/BMW-Dynatrace-config/CD_notification-composite-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-composite-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-composite-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_notification-composite-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..cecb2900 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-composite-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDnotification-composite-service-PROD-E2E: defaultPRODE2E.json +- CDnotification-composite-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDnotification-composite-service-PROD-E2E: +- name: CD_notification-composite-service PROD +- mzName: CD_notification-composite-service/management-zone/CDnotification-composite-service.name +- mzId: CD_notification-composite-service/management-zone/CDnotification-composite-service.id +- skipDeployment: "true" +#Configuration +CDnotification-composite-service-PROD-E2E.EMEA-Prod: +- name: CD_notification-composite-service PROD +- mzName: CD_notification-composite-service/management-zone/CDnotification-composite-service.name +- mzId: CD_notification-composite-service/management-zone/CDnotification-composite-service.id +- tag: notification-composite-service +- skipDeployment: "false" +CDnotification-composite-service-PROD-E2E.NA-Prod: +- name: CD_notification-composite-service PROD +- mzName: CD_notification-composite-service/management-zone/CDnotification-composite-service.name +- mzId: CD_notification-composite-service/management-zone/CDnotification-composite-service.id +- tag: notification-composite-service +- skipDeployment: "false" +CDnotification-composite-service-PROD-E2E.CN-Prod: +- name: CD_notification-composite-service PROD +- mzName: CD_notification-composite-service/management-zone/CDnotification-composite-service.name +- mzId: CD_notification-composite-service/management-zone/CDnotification-composite-service.id +- tag: notification-composite-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDnotification-composite-service-INT-TEST: +- name: CD_notification-composite-service INT-TEST +- mzName: CD_notification-composite-service/management-zone/CDnotification-composite-service.name +- mzId: CD_notification-composite-service/management-zone/CDnotification-composite-service.id +- tag: notification-composite-service +- skipDeployment: "true" +#Configuration +CDnotification-composite-service-INT-TEST.EMEA-PreProd: +- name: CD_notification-composite-service INT-TEST +- mzName: CD_notification-composite-service/management-zone/CDnotification-composite-service.name +- mzId: CD_notification-composite-service/management-zone/CDnotification-composite-service.id +- tag: notification-composite-service +- skipDeployment: "false" +CDnotification-composite-service-INT-TEST.NA-PreProd: +- name: CD_notification-composite-service INT-TEST +- mzName: CD_notification-composite-service/management-zone/CDnotification-composite-service.name +- mzId: CD_notification-composite-service/management-zone/CDnotification-composite-service.id +- env: INT +- skipDeployment: "false" +CDnotification-composite-service-INT-TEST.CN-PreProd: +- name: CD_notification-composite-service INT-TEST +- mzName: CD_notification-composite-service/management-zone/CDnotification-composite-service.name +- mzId: CD_notification-composite-service/management-zone/CDnotification-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-composite-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_notification-composite-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-composite-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-composite-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_notification-composite-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-composite-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-composite-service/management-zone/README.md b/BMW-Dynatrace-config/CD_notification-composite-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-composite-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_notification-composite-service/management-zone/default.json b/BMW-Dynatrace-config/CD_notification-composite-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-composite-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-composite-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_notification-composite-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..b52fdf30 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-composite-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDnotification-composite-service: default.json + +CDnotification-composite-service: +- name: CD_notification-composite-service +- tag: notification-composite-service diff --git a/BMW-Dynatrace-config/CD_notification-composite-service/notification/README.md b/BMW-Dynatrace-config/CD_notification-composite-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-composite-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-composite-service/notification/email.json b/BMW-Dynatrace-config/CD_notification-composite-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-composite-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-composite-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_notification-composite-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-composite-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-composite-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_notification-composite-service/notification/notification.yaml new file mode 100644 index 00000000..302e9cf4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-composite-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDnotification-composite-service-PROD: msTeams.json +- CDnotification-composite-service-E2E: msTeams.json +- CDnotification-composite-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDnotification-composite-service-PROD: +- name: CD_notification-composite-service PROD +- alertingProfile: CD_notification-composite-service/alerting-profile/CDnotification-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDnotification-composite-service-PROD.EMEA-Prod: +- name: CD_notification-composite-service PROD +- alertingProfile: CD_notification-composite-service/alerting-profile/CDnotification-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDnotification-composite-service-PROD.NA-Prod: +- name: CD_notification-composite-service PROD +- alertingProfile: CD_notification-composite-service/alerting-profile/CDnotification-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDnotification-composite-service-PROD.CN-Prod: +- name: CD_notification-composite-service PROD +- alertingProfile: CD_notification-composite-service/alerting-profile/CDnotification-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDnotification-composite-service-E2E: +- name: CD_notification-composite-service E2E +- alertingProfile: CD_notification-composite-service/alerting-profile/CDnotification-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDnotification-composite-service-E2E.EMEA-Prod: +- name: CD_notification-composite-service E2E +- alertingProfile: CD_notification-composite-service/alerting-profile/CDnotification-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDnotification-composite-service-E2E.NA-Prod: +- name: CD_notification-composite-service E2E +- alertingProfile: CD_notification-composite-service/alerting-profile/CDnotification-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDnotification-composite-service-E2E.CN-Prod: +- name: CD_notification-composite-service E2E +- alertingProfile: CD_notification-composite-service/alerting-profile/CDnotification-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDnotification-composite-service-INT: +- name: CD_notification-composite-service INT +- alertingProfile: CD_notification-composite-service/alerting-profile/CDnotification-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDnotification-composite-service-INT.EMEA-PreProd: +- name: CD_notification-composite-service INT +- alertingProfile: CD_notification-composite-service/alerting-profile/CDnotification-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDnotification-composite-service-INT.NA-PreProd: +- name: CD_notification-composite-service INT +- alertingProfile: CD_notification-composite-service/alerting-profile/CDnotification-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDnotification-composite-service-INT.CN-PreProd: +- name: CD_notification-composite-service INT +- alertingProfile: CD_notification-composite-service/alerting-profile/CDnotification-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-composite-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_notification-composite-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-composite-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-composite-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_notification-composite-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-composite-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-composite-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_notification-composite-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..ad05bec9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-composite-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- notification-composite-service: default.json + +notification-composite-service: +- name: CD_notification-composite-service - +- mzName: CD_notification-composite-service/management-zone/CDnotification-composite-service.name +- mzId: CD_notification-composite-service/management-zone/CDnotification-composite-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_notification-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..0eb5b464 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDnotification-service-PROD: default.json +- CDnotification-service-E2E: default.json +- CDnotification-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDnotification-service-PROD: +- name: CD_notification-service PROD +- tag: notification-service +- mzId: CD_notification-service/management-zone/CDnotification-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDnotification-service-PROD.EMEA-Prod: +- name: CD_notification-service PROD +- tag: notification-service +- mzId: CD_notification-service/management-zone/CDnotification-service.id +- env: PROD +- skipDeployment: "false" +CDnotification-service-PROD.NA-Prod: +- name: CD_notification-service PROD +- tag: notification-service +- mzId: CD_notification-service/management-zone/CDnotification-service.id +- env: PROD +- skipDeployment: "false" +CDnotification-service-PROD.CN-Prod: +- name: CD_notification-service PROD +- tag: notification-service +- mzId: CD_notification-service/management-zone/CDnotification-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDnotification-service-E2E: +- name: CD_notification-service E2E +- tag: notification-service +- mzId: CD_notification-service/management-zone/CDnotification-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDnotification-service-E2E.EMEA-Prod: +- name: CD_notification-service E2E +- tag: notification-service +- mzId: CD_notification-service/management-zone/CDnotification-service.id +- env: E2E +- skipDeployment: "false" +CDnotification-service-E2E.NA-Prod: +- name: CD_notification-service E2E +- tag: notification-service +- mzId: CD_notification-service/management-zone/CDnotification-service.id +- env: E2E +- skipDeployment: "false" +CDnotification-service-E2E.CN-Prod: +- name: CD_notification-service E2E +- tag: notification-service +- mzId: CD_notification-service/management-zone/CDnotification-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDnotification-service-INT: +- name: CD_notification-service INT +- tag: notification-service +- mzId: CD_notification-service/management-zone/CDnotification-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDnotification-service-INT.EMEA-PreProd: +- name: CD_notification-service INT +- tag: notification-service +- mzId: CD_notification-service/management-zone/CDnotification-service.id +- env: INT +- skipDeployment: "false" +CDnotification-service-INT.NA-PreProd: +- name: CD_notification-service INT +- tag: notification-service +- mzId: CD_notification-service/management-zone/CDnotification-service.id +- env: INT +- skipDeployment: "false" +CDnotification-service-INT.CN-PreProd: +- name: CD_notification-service INT +- tag: notification-service +- mzId: CD_notification-service/management-zone/CDnotification-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_notification-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_notification-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_notification-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_notification-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_notification-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-service/dashboard/README.md b/BMW-Dynatrace-config/CD_notification-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_notification-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..9ad6007b --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDnotification-service-PROD-E2E: defaultPRODE2E.json +- CDnotification-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDnotification-service-PROD-E2E: +- name: CD_notification-service PROD +- mzName: CD_notification-service/management-zone/CDnotification-service.name +- mzId: CD_notification-service/management-zone/CDnotification-service.id +- skipDeployment: "true" +#Configuration +CDnotification-service-PROD-E2E.EMEA-Prod: +- name: CD_notification-service PROD +- mzName: CD_notification-service/management-zone/CDnotification-service.name +- mzId: CD_notification-service/management-zone/CDnotification-service.id +- tag: notification-service +- skipDeployment: "false" +CDnotification-service-PROD-E2E.NA-Prod: +- name: CD_notification-service PROD +- mzName: CD_notification-service/management-zone/CDnotification-service.name +- mzId: CD_notification-service/management-zone/CDnotification-service.id +- tag: notification-service +- skipDeployment: "false" +CDnotification-service-PROD-E2E.CN-Prod: +- name: CD_notification-service PROD +- mzName: CD_notification-service/management-zone/CDnotification-service.name +- mzId: CD_notification-service/management-zone/CDnotification-service.id +- tag: notification-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDnotification-service-INT-TEST: +- name: CD_notification-service INT-TEST +- mzName: CD_notification-service/management-zone/CDnotification-service.name +- mzId: CD_notification-service/management-zone/CDnotification-service.id +- tag: notification-service +- skipDeployment: "true" +#Configuration +CDnotification-service-INT-TEST.EMEA-PreProd: +- name: CD_notification-service INT-TEST +- mzName: CD_notification-service/management-zone/CDnotification-service.name +- mzId: CD_notification-service/management-zone/CDnotification-service.id +- tag: notification-service +- skipDeployment: "false" +CDnotification-service-INT-TEST.NA-PreProd: +- name: CD_notification-service INT-TEST +- mzName: CD_notification-service/management-zone/CDnotification-service.name +- mzId: CD_notification-service/management-zone/CDnotification-service.id +- env: INT +- skipDeployment: "false" +CDnotification-service-INT-TEST.CN-PreProd: +- name: CD_notification-service INT-TEST +- mzName: CD_notification-service/management-zone/CDnotification-service.name +- mzId: CD_notification-service/management-zone/CDnotification-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_notification-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_notification-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-service/management-zone/README.md b/BMW-Dynatrace-config/CD_notification-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_notification-service/management-zone/default.json b/BMW-Dynatrace-config/CD_notification-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_notification-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..0a3e80c4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDnotification-service: default.json + +CDnotification-service: +- name: CD_notification-service +- tag: notification-service diff --git a/BMW-Dynatrace-config/CD_notification-service/notification/README.md b/BMW-Dynatrace-config/CD_notification-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-service/notification/email.json b/BMW-Dynatrace-config/CD_notification-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_notification-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_notification-service/notification/notification.yaml new file mode 100644 index 00000000..ea8a6432 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDnotification-service-PROD: msTeams.json +- CDnotification-service-E2E: msTeams.json +- CDnotification-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDnotification-service-PROD: +- name: CD_notification-service PROD +- alertingProfile: CD_notification-service/alerting-profile/CDnotification-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDnotification-service-PROD.EMEA-Prod: +- name: CD_notification-service PROD +- alertingProfile: CD_notification-service/alerting-profile/CDnotification-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDnotification-service-PROD.NA-Prod: +- name: CD_notification-service PROD +- alertingProfile: CD_notification-service/alerting-profile/CDnotification-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDnotification-service-PROD.CN-Prod: +- name: CD_notification-service PROD +- alertingProfile: CD_notification-service/alerting-profile/CDnotification-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDnotification-service-E2E: +- name: CD_notification-service E2E +- alertingProfile: CD_notification-service/alerting-profile/CDnotification-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDnotification-service-E2E.EMEA-Prod: +- name: CD_notification-service E2E +- alertingProfile: CD_notification-service/alerting-profile/CDnotification-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDnotification-service-E2E.NA-Prod: +- name: CD_notification-service E2E +- alertingProfile: CD_notification-service/alerting-profile/CDnotification-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDnotification-service-E2E.CN-Prod: +- name: CD_notification-service E2E +- alertingProfile: CD_notification-service/alerting-profile/CDnotification-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDnotification-service-INT: +- name: CD_notification-service INT +- alertingProfile: CD_notification-service/alerting-profile/CDnotification-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDnotification-service-INT.EMEA-PreProd: +- name: CD_notification-service INT +- alertingProfile: CD_notification-service/alerting-profile/CDnotification-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDnotification-service-INT.NA-PreProd: +- name: CD_notification-service INT +- alertingProfile: CD_notification-service/alerting-profile/CDnotification-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDnotification-service-INT.CN-PreProd: +- name: CD_notification-service INT +- alertingProfile: CD_notification-service/alerting-profile/CDnotification-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_notification-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_notification-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_notification-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..3ffccc64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- notification-service: default.json + +notification-service: +- name: CD_notification-service - +- mzName: CD_notification-service/management-zone/CDnotification-service.name +- mzId: CD_notification-service/management-zone/CDnotification-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oas-composite-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_oas-composite-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..85b94482 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oas-composite-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDoas-composite-service-PROD: default.json +- CDoas-composite-service-E2E: default.json +- CDoas-composite-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDoas-composite-service-PROD: +- name: CD_oas-composite-service PROD +- tag: oas-composite-service +- mzId: CD_oas-composite-service/management-zone/CDoas-composite-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDoas-composite-service-PROD.EMEA-Prod: +- name: CD_oas-composite-service PROD +- tag: oas-composite-service +- mzId: CD_oas-composite-service/management-zone/CDoas-composite-service.id +- env: PROD +- skipDeployment: "false" +CDoas-composite-service-PROD.NA-Prod: +- name: CD_oas-composite-service PROD +- tag: oas-composite-service +- mzId: CD_oas-composite-service/management-zone/CDoas-composite-service.id +- env: PROD +- skipDeployment: "false" +CDoas-composite-service-PROD.CN-Prod: +- name: CD_oas-composite-service PROD +- tag: oas-composite-service +- mzId: CD_oas-composite-service/management-zone/CDoas-composite-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDoas-composite-service-E2E: +- name: CD_oas-composite-service E2E +- tag: oas-composite-service +- mzId: CD_oas-composite-service/management-zone/CDoas-composite-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDoas-composite-service-E2E.EMEA-Prod: +- name: CD_oas-composite-service E2E +- tag: oas-composite-service +- mzId: CD_oas-composite-service/management-zone/CDoas-composite-service.id +- env: E2E +- skipDeployment: "false" +CDoas-composite-service-E2E.NA-Prod: +- name: CD_oas-composite-service E2E +- tag: oas-composite-service +- mzId: CD_oas-composite-service/management-zone/CDoas-composite-service.id +- env: E2E +- skipDeployment: "false" +CDoas-composite-service-E2E.CN-Prod: +- name: CD_oas-composite-service E2E +- tag: oas-composite-service +- mzId: CD_oas-composite-service/management-zone/CDoas-composite-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDoas-composite-service-INT: +- name: CD_oas-composite-service INT +- tag: oas-composite-service +- mzId: CD_oas-composite-service/management-zone/CDoas-composite-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDoas-composite-service-INT.EMEA-PreProd: +- name: CD_oas-composite-service INT +- tag: oas-composite-service +- mzId: CD_oas-composite-service/management-zone/CDoas-composite-service.id +- env: INT +- skipDeployment: "false" +CDoas-composite-service-INT.NA-PreProd: +- name: CD_oas-composite-service INT +- tag: oas-composite-service +- mzId: CD_oas-composite-service/management-zone/CDoas-composite-service.id +- env: INT +- skipDeployment: "false" +CDoas-composite-service-INT.CN-PreProd: +- name: CD_oas-composite-service INT +- tag: oas-composite-service +- mzId: CD_oas-composite-service/management-zone/CDoas-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oas-composite-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_oas-composite-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oas-composite-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oas-composite-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_oas-composite-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_oas-composite-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oas-composite-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_oas-composite-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oas-composite-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oas-composite-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_oas-composite-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oas-composite-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oas-composite-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_oas-composite-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oas-composite-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oas-composite-service/dashboard/README.md b/BMW-Dynatrace-config/CD_oas-composite-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_oas-composite-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oas-composite-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_oas-composite-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..403f7507 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oas-composite-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDoas-composite-service-PROD-E2E: defaultPRODE2E.json +- CDoas-composite-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDoas-composite-service-PROD-E2E: +- name: CD_oas-composite-service PROD +- mzName: CD_oas-composite-service/management-zone/CDoas-composite-service.name +- mzId: CD_oas-composite-service/management-zone/CDoas-composite-service.id +- skipDeployment: "true" +#Configuration +CDoas-composite-service-PROD-E2E.EMEA-Prod: +- name: CD_oas-composite-service PROD +- mzName: CD_oas-composite-service/management-zone/CDoas-composite-service.name +- mzId: CD_oas-composite-service/management-zone/CDoas-composite-service.id +- tag: oas-composite-service +- skipDeployment: "false" +CDoas-composite-service-PROD-E2E.NA-Prod: +- name: CD_oas-composite-service PROD +- mzName: CD_oas-composite-service/management-zone/CDoas-composite-service.name +- mzId: CD_oas-composite-service/management-zone/CDoas-composite-service.id +- tag: oas-composite-service +- skipDeployment: "false" +CDoas-composite-service-PROD-E2E.CN-Prod: +- name: CD_oas-composite-service PROD +- mzName: CD_oas-composite-service/management-zone/CDoas-composite-service.name +- mzId: CD_oas-composite-service/management-zone/CDoas-composite-service.id +- tag: oas-composite-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDoas-composite-service-INT-TEST: +- name: CD_oas-composite-service INT-TEST +- mzName: CD_oas-composite-service/management-zone/CDoas-composite-service.name +- mzId: CD_oas-composite-service/management-zone/CDoas-composite-service.id +- tag: oas-composite-service +- skipDeployment: "true" +#Configuration +CDoas-composite-service-INT-TEST.EMEA-PreProd: +- name: CD_oas-composite-service INT-TEST +- mzName: CD_oas-composite-service/management-zone/CDoas-composite-service.name +- mzId: CD_oas-composite-service/management-zone/CDoas-composite-service.id +- tag: oas-composite-service +- skipDeployment: "false" +CDoas-composite-service-INT-TEST.NA-PreProd: +- name: CD_oas-composite-service INT-TEST +- mzName: CD_oas-composite-service/management-zone/CDoas-composite-service.name +- mzId: CD_oas-composite-service/management-zone/CDoas-composite-service.id +- env: INT +- skipDeployment: "false" +CDoas-composite-service-INT-TEST.CN-PreProd: +- name: CD_oas-composite-service INT-TEST +- mzName: CD_oas-composite-service/management-zone/CDoas-composite-service.name +- mzId: CD_oas-composite-service/management-zone/CDoas-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oas-composite-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_oas-composite-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oas-composite-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oas-composite-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_oas-composite-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_oas-composite-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oas-composite-service/management-zone/README.md b/BMW-Dynatrace-config/CD_oas-composite-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oas-composite-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_oas-composite-service/management-zone/default.json b/BMW-Dynatrace-config/CD_oas-composite-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_oas-composite-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oas-composite-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_oas-composite-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..a3ddff3a --- /dev/null +++ b/BMW-Dynatrace-config/CD_oas-composite-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDoas-composite-service: default.json + +CDoas-composite-service: +- name: CD_oas-composite-service +- tag: oas-composite-service diff --git a/BMW-Dynatrace-config/CD_oas-composite-service/notification/README.md b/BMW-Dynatrace-config/CD_oas-composite-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oas-composite-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oas-composite-service/notification/email.json b/BMW-Dynatrace-config/CD_oas-composite-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oas-composite-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oas-composite-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_oas-composite-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oas-composite-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oas-composite-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_oas-composite-service/notification/notification.yaml new file mode 100644 index 00000000..ba91832a --- /dev/null +++ b/BMW-Dynatrace-config/CD_oas-composite-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDoas-composite-service-PROD: msTeams.json +- CDoas-composite-service-E2E: msTeams.json +- CDoas-composite-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDoas-composite-service-PROD: +- name: CD_oas-composite-service PROD +- alertingProfile: CD_oas-composite-service/alerting-profile/CDoas-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDoas-composite-service-PROD.EMEA-Prod: +- name: CD_oas-composite-service PROD +- alertingProfile: CD_oas-composite-service/alerting-profile/CDoas-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDoas-composite-service-PROD.NA-Prod: +- name: CD_oas-composite-service PROD +- alertingProfile: CD_oas-composite-service/alerting-profile/CDoas-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDoas-composite-service-PROD.CN-Prod: +- name: CD_oas-composite-service PROD +- alertingProfile: CD_oas-composite-service/alerting-profile/CDoas-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDoas-composite-service-E2E: +- name: CD_oas-composite-service E2E +- alertingProfile: CD_oas-composite-service/alerting-profile/CDoas-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDoas-composite-service-E2E.EMEA-Prod: +- name: CD_oas-composite-service E2E +- alertingProfile: CD_oas-composite-service/alerting-profile/CDoas-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDoas-composite-service-E2E.NA-Prod: +- name: CD_oas-composite-service E2E +- alertingProfile: CD_oas-composite-service/alerting-profile/CDoas-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDoas-composite-service-E2E.CN-Prod: +- name: CD_oas-composite-service E2E +- alertingProfile: CD_oas-composite-service/alerting-profile/CDoas-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDoas-composite-service-INT: +- name: CD_oas-composite-service INT +- alertingProfile: CD_oas-composite-service/alerting-profile/CDoas-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDoas-composite-service-INT.EMEA-PreProd: +- name: CD_oas-composite-service INT +- alertingProfile: CD_oas-composite-service/alerting-profile/CDoas-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDoas-composite-service-INT.NA-PreProd: +- name: CD_oas-composite-service INT +- alertingProfile: CD_oas-composite-service/alerting-profile/CDoas-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDoas-composite-service-INT.CN-PreProd: +- name: CD_oas-composite-service INT +- alertingProfile: CD_oas-composite-service/alerting-profile/CDoas-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oas-composite-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_oas-composite-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_oas-composite-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oas-composite-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_oas-composite-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_oas-composite-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oas-composite-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_oas-composite-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..faefd428 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oas-composite-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- oas-composite-service: default.json + +oas-composite-service: +- name: CD_oas-composite-service - +- mzName: CD_oas-composite-service/management-zone/CDoas-composite-service.name +- mzId: CD_oas-composite-service/management-zone/CDoas-composite-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisc2v/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_oclisc2v/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..d58e9e79 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisc2v/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDoclisc2v-PROD: default.json +- CDoclisc2v-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDoclisc2v-PROD: +- name: CD_oclisc2v PROD +- tag: oclisc2v +- mzId: CD_oclisc2v/management-zone/CDoclisc2v.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDoclisc2v-PROD.EMEA-Prod: +- name: CD_oclisc2v PROD +- tag: oclisc2v +- mzId: CD_oclisc2v/management-zone/CDoclisc2v.id +- env: PROD +- skipDeployment: "false" +CDoclisc2v-PROD.NA-Prod: +- name: CD_oclisc2v PROD +- tag: oclisc2v +- mzId: CD_oclisc2v/management-zone/CDoclisc2v.id +- env: PROD +- skipDeployment: "false" +CDoclisc2v-PROD.CN-Prod: +- name: CD_oclisc2v PROD +- tag: oclisc2v +- mzId: CD_oclisc2v/management-zone/CDoclisc2v.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDoclisc2v-INT: +- name: CD_oclisc2v INT +- tag: oclisc2v +- mzId: CD_oclisc2v/management-zone/CDoclisc2v.id +- env: INT +- skipDeployment: "true" +#Configuration +CDoclisc2v-INT.EMEA-PreProd: +- name: CD_oclisc2v INT +- tag: oclisc2v +- mzId: CD_oclisc2v/management-zone/CDoclisc2v.id +- env: INT +- skipDeployment: "false" +CDoclisc2v-INT.NA-PreProd: +- name: CD_oclisc2v INT +- tag: oclisc2v +- mzId: CD_oclisc2v/management-zone/CDoclisc2v.id +- env: INT +- skipDeployment: "false" +CDoclisc2v-INT.CN-PreProd: +- name: CD_oclisc2v INT +- tag: oclisc2v +- mzId: CD_oclisc2v/management-zone/CDoclisc2v.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisc2v/alerting-profile/default.json b/BMW-Dynatrace-config/CD_oclisc2v/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisc2v/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisc2v/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_oclisc2v/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisc2v/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisc2v/custom-service-java/README.md b/BMW-Dynatrace-config/CD_oclisc2v/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisc2v/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisc2v/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_oclisc2v/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisc2v/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisc2v/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_oclisc2v/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisc2v/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisc2v/dashboard/README.md b/BMW-Dynatrace-config/CD_oclisc2v/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisc2v/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisc2v/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_oclisc2v/dashboard/dashboard.yaml new file mode 100644 index 00000000..0e10aa38 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisc2v/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDoclisc2v-PROD-E2E: defaultPRODE2E.json +- CDoclisc2v-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDoclisc2v-PROD-E2E: +- name: CD_oclisc2v PROD-E2E +- mzName: CD_oclisc2v/management-zone/CDoclisc2v.name +- mzId: CD_oclisc2v/management-zone/CDoclisc2v.id +- skipDeployment: "true" +#Configuration +CDoclisc2v-PROD-E2E.EMEA-Prod: +- name: CD_oclisc2v PROD-E2E +- mzName: CD_oclisc2v/management-zone/CDoclisc2v.name +- mzId: CD_oclisc2v/management-zone/CDoclisc2v.id +- tag: oclisc2v +- skipDeployment: "false" +CDoclisc2v-PROD-E2E.NA-Prod: +- name: CD_oclisc2v PROD-E2E +- mzName: CD_oclisc2v/management-zone/CDoclisc2v.name +- mzId: CD_oclisc2v/management-zone/CDoclisc2v.id +- tag: oclisc2v +- skipDeployment: "false" +CDoclisc2v-PROD-E2E.CN-Prod: +- name: CD_oclisc2v PROD-E2E +- mzName: CD_oclisc2v/management-zone/CDoclisc2v.name +- mzId: CD_oclisc2v/management-zone/CDoclisc2v.id +- tag: oclisc2v +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDoclisc2v-INT-TEST: +- name: CD_oclisc2v INT-TEST +- mzName: CD_oclisc2v/management-zone/CDoclisc2v.name +- mzId: CD_oclisc2v/management-zone/CDoclisc2v.id +- tag: oclisc2v +- skipDeployment: "true" +#Configuration +CDoclisc2v-INT-TEST.EMEA-PreProd: +- name: CD_oclisc2v INT-TEST +- mzName: CD_oclisc2v/management-zone/CDoclisc2v.name +- mzId: CD_oclisc2v/management-zone/CDoclisc2v.id +- tag: oclisc2v +- skipDeployment: "false" +CDoclisc2v-INT-TEST.NA-PreProd: +- name: CD_oclisc2v INT-TEST +- mzName: CD_oclisc2v/management-zone/CDoclisc2v.name +- mzId: CD_oclisc2v/management-zone/CDoclisc2v.id +- env: INT +- skipDeployment: "false" +CDoclisc2v-INT-TEST.CN-PreProd: +- name: CD_oclisc2v INT-TEST +- mzName: CD_oclisc2v/management-zone/CDoclisc2v.name +- mzId: CD_oclisc2v/management-zone/CDoclisc2v.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisc2v/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_oclisc2v/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisc2v/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisc2v/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_oclisc2v/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisc2v/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisc2v/management-zone/README.md b/BMW-Dynatrace-config/CD_oclisc2v/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisc2v/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_oclisc2v/management-zone/default.json b/BMW-Dynatrace-config/CD_oclisc2v/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisc2v/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisc2v/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_oclisc2v/management-zone/management-zone.yaml new file mode 100644 index 00000000..f79953a9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisc2v/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDoclisc2v: default.json + +CDoclisc2v: +- name: CD_oclisc2v +- tag: oclisc2v diff --git a/BMW-Dynatrace-config/CD_oclisc2v/notification/README.md b/BMW-Dynatrace-config/CD_oclisc2v/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisc2v/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisc2v/notification/email.json b/BMW-Dynatrace-config/CD_oclisc2v/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisc2v/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisc2v/notification/msTeams.json b/BMW-Dynatrace-config/CD_oclisc2v/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisc2v/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisc2v/notification/notification.yaml b/BMW-Dynatrace-config/CD_oclisc2v/notification/notification.yaml new file mode 100644 index 00000000..47c40300 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisc2v/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDoclisc2v-PROD: msTeams.json +- CDoclisc2v-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDoclisc2v-PROD: +- name: CD_oclisc2v PROD +- alertingProfile: CD_oclisc2v/alerting-profile/CDoclisc2v-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDoclisc2v-PROD.EMEA-Prod: +- name: CD_oclisc2v PROD +- alertingProfile: CD_oclisc2v/alerting-profile/CDoclisc2v-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDoclisc2v-PROD.NA-Prod: +- name: CD_oclisc2v PROD +- alertingProfile: CD_oclisc2v/alerting-profile/CDoclisc2v-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDoclisc2v-PROD.CN-Prod: +- name: CD_oclisc2v PROD +- alertingProfile: CD_oclisc2v/alerting-profile/CDoclisc2v-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDoclisc2v-INT: +- name: CD_oclisc2v INT +- alertingProfile: CD_oclisc2v/alerting-profile/CDoclisc2v-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDoclisc2v-INT.EMEA-PreProd: +- name: CD_oclisc2v INT +- alertingProfile: CD_oclisc2v/alerting-profile/CDoclisc2v-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDoclisc2v-INT.NA-PreProd: +- name: CD_oclisc2v INT +- alertingProfile: CD_oclisc2v/alerting-profile/CDoclisc2v-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDoclisc2v-INT.CN-PreProd: +- name: CD_oclisc2v INT +- alertingProfile: CD_oclisc2v/alerting-profile/CDoclisc2v-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisc2v/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_oclisc2v/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisc2v/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisc2v/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_oclisc2v/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisc2v/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisc2v/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_oclisc2v/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..a6927254 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisc2v/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- oclisc2v: default.json + +oclisc2v: +- name: CD_oclisc2v - +- mzName: CD_oclisc2v/management-zone/CDoclisc2v.name +- mzId: CD_oclisc2v/management-zone/CDoclisc2v.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisocsp/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_oclisocsp/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..d35caa5a --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisocsp/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDoclisocsp-PROD: default.json +- CDoclisocsp-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDoclisocsp-PROD: +- name: CD_oclisocsp PROD +- tag: oclisocsp +- mzId: CD_oclisocsp/management-zone/CDoclisocsp.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDoclisocsp-PROD.EMEA-Prod: +- name: CD_oclisocsp PROD +- tag: oclisocsp +- mzId: CD_oclisocsp/management-zone/CDoclisocsp.id +- env: PROD +- skipDeployment: "false" +CDoclisocsp-PROD.NA-Prod: +- name: CD_oclisocsp PROD +- tag: oclisocsp +- mzId: CD_oclisocsp/management-zone/CDoclisocsp.id +- env: PROD +- skipDeployment: "false" +CDoclisocsp-PROD.CN-Prod: +- name: CD_oclisocsp PROD +- tag: oclisocsp +- mzId: CD_oclisocsp/management-zone/CDoclisocsp.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDoclisocsp-INT: +- name: CD_oclisocsp INT +- tag: oclisocsp +- mzId: CD_oclisocsp/management-zone/CDoclisocsp.id +- env: INT +- skipDeployment: "true" +#Configuration +CDoclisocsp-INT.EMEA-PreProd: +- name: CD_oclisocsp INT +- tag: oclisocsp +- mzId: CD_oclisocsp/management-zone/CDoclisocsp.id +- env: INT +- skipDeployment: "false" +CDoclisocsp-INT.NA-PreProd: +- name: CD_oclisocsp INT +- tag: oclisocsp +- mzId: CD_oclisocsp/management-zone/CDoclisocsp.id +- env: INT +- skipDeployment: "false" +CDoclisocsp-INT.CN-PreProd: +- name: CD_oclisocsp INT +- tag: oclisocsp +- mzId: CD_oclisocsp/management-zone/CDoclisocsp.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisocsp/alerting-profile/default.json b/BMW-Dynatrace-config/CD_oclisocsp/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisocsp/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisocsp/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_oclisocsp/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisocsp/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisocsp/custom-service-java/README.md b/BMW-Dynatrace-config/CD_oclisocsp/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisocsp/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisocsp/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_oclisocsp/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisocsp/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisocsp/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_oclisocsp/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisocsp/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisocsp/dashboard/README.md b/BMW-Dynatrace-config/CD_oclisocsp/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisocsp/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisocsp/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_oclisocsp/dashboard/dashboard.yaml new file mode 100644 index 00000000..71409355 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisocsp/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDoclisocsp-PROD-E2E: defaultPRODE2E.json +- CDoclisocsp-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDoclisocsp-PROD-E2E: +- name: CD_oclisocsp PROD-E2E +- mzName: CD_oclisocsp/management-zone/CDoclisocsp.name +- mzId: CD_oclisocsp/management-zone/CDoclisocsp.id +- skipDeployment: "true" +#Configuration +CDoclisocsp-PROD-E2E.EMEA-Prod: +- name: CD_oclisocsp PROD-E2E +- mzName: CD_oclisocsp/management-zone/CDoclisocsp.name +- mzId: CD_oclisocsp/management-zone/CDoclisocsp.id +- tag: oclisocsp +- skipDeployment: "false" +CDoclisocsp-PROD-E2E.NA-Prod: +- name: CD_oclisocsp PROD-E2E +- mzName: CD_oclisocsp/management-zone/CDoclisocsp.name +- mzId: CD_oclisocsp/management-zone/CDoclisocsp.id +- tag: oclisocsp +- skipDeployment: "false" +CDoclisocsp-PROD-E2E.CN-Prod: +- name: CD_oclisocsp PROD-E2E +- mzName: CD_oclisocsp/management-zone/CDoclisocsp.name +- mzId: CD_oclisocsp/management-zone/CDoclisocsp.id +- tag: oclisocsp +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDoclisocsp-INT-TEST: +- name: CD_oclisocsp INT-TEST +- mzName: CD_oclisocsp/management-zone/CDoclisocsp.name +- mzId: CD_oclisocsp/management-zone/CDoclisocsp.id +- tag: oclisocsp +- skipDeployment: "true" +#Configuration +CDoclisocsp-INT-TEST.EMEA-PreProd: +- name: CD_oclisocsp INT-TEST +- mzName: CD_oclisocsp/management-zone/CDoclisocsp.name +- mzId: CD_oclisocsp/management-zone/CDoclisocsp.id +- tag: oclisocsp +- skipDeployment: "false" +CDoclisocsp-INT-TEST.NA-PreProd: +- name: CD_oclisocsp INT-TEST +- mzName: CD_oclisocsp/management-zone/CDoclisocsp.name +- mzId: CD_oclisocsp/management-zone/CDoclisocsp.id +- env: INT +- skipDeployment: "false" +CDoclisocsp-INT-TEST.CN-PreProd: +- name: CD_oclisocsp INT-TEST +- mzName: CD_oclisocsp/management-zone/CDoclisocsp.name +- mzId: CD_oclisocsp/management-zone/CDoclisocsp.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisocsp/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_oclisocsp/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisocsp/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisocsp/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_oclisocsp/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisocsp/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisocsp/management-zone/README.md b/BMW-Dynatrace-config/CD_oclisocsp/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisocsp/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_oclisocsp/management-zone/default.json b/BMW-Dynatrace-config/CD_oclisocsp/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisocsp/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisocsp/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_oclisocsp/management-zone/management-zone.yaml new file mode 100644 index 00000000..39987e93 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisocsp/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDoclisocsp: default.json + +CDoclisocsp: +- name: CD_oclisocsp +- tag: oclisocsp diff --git a/BMW-Dynatrace-config/CD_oclisocsp/notification/README.md b/BMW-Dynatrace-config/CD_oclisocsp/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisocsp/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisocsp/notification/email.json b/BMW-Dynatrace-config/CD_oclisocsp/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisocsp/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisocsp/notification/msTeams.json b/BMW-Dynatrace-config/CD_oclisocsp/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisocsp/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisocsp/notification/notification.yaml b/BMW-Dynatrace-config/CD_oclisocsp/notification/notification.yaml new file mode 100644 index 00000000..c39ed9bb --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisocsp/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDoclisocsp-PROD: msTeams.json +- CDoclisocsp-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDoclisocsp-PROD: +- name: CD_oclisocsp PROD +- alertingProfile: CD_oclisocsp/alerting-profile/CDoclisocsp-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDoclisocsp-PROD.EMEA-Prod: +- name: CD_oclisocsp PROD +- alertingProfile: CD_oclisocsp/alerting-profile/CDoclisocsp-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDoclisocsp-PROD.NA-Prod: +- name: CD_oclisocsp PROD +- alertingProfile: CD_oclisocsp/alerting-profile/CDoclisocsp-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDoclisocsp-PROD.CN-Prod: +- name: CD_oclisocsp PROD +- alertingProfile: CD_oclisocsp/alerting-profile/CDoclisocsp-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDoclisocsp-INT: +- name: CD_oclisocsp INT +- alertingProfile: CD_oclisocsp/alerting-profile/CDoclisocsp-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDoclisocsp-INT.EMEA-PreProd: +- name: CD_oclisocsp INT +- alertingProfile: CD_oclisocsp/alerting-profile/CDoclisocsp-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDoclisocsp-INT.NA-PreProd: +- name: CD_oclisocsp INT +- alertingProfile: CD_oclisocsp/alerting-profile/CDoclisocsp-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDoclisocsp-INT.CN-PreProd: +- name: CD_oclisocsp INT +- alertingProfile: CD_oclisocsp/alerting-profile/CDoclisocsp-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisocsp/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_oclisocsp/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisocsp/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisocsp/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_oclisocsp/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisocsp/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisocsp/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_oclisocsp/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..0c3abf43 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisocsp/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- oclisocsp: default.json + +oclisocsp: +- name: CD_oclisocsp - +- mzName: CD_oclisocsp/management-zone/CDoclisocsp.name +- mzId: CD_oclisocsp/management-zone/CDoclisocsp.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omc-cd-services/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_omc-cd-services/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..bab43744 --- /dev/null +++ b/BMW-Dynatrace-config/CD_omc-cd-services/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDomc-cd-services-PROD: default.json +- CDomc-cd-services-E2E: default.json +- CDomc-cd-services-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDomc-cd-services-PROD: +- name: CD_omc-cd-services PROD +- tag: omc-cd-services +- mzId: CD_omc-cd-services/management-zone/CDomc-cd-services.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDomc-cd-services-PROD.EMEA-Prod: +- name: CD_omc-cd-services PROD +- tag: omc-cd-services +- mzId: CD_omc-cd-services/management-zone/CDomc-cd-services.id +- env: PROD +- skipDeployment: "false" +CDomc-cd-services-PROD.NA-Prod: +- name: CD_omc-cd-services PROD +- tag: omc-cd-services +- mzId: CD_omc-cd-services/management-zone/CDomc-cd-services.id +- env: PROD +- skipDeployment: "false" +CDomc-cd-services-PROD.CN-Prod: +- name: CD_omc-cd-services PROD +- tag: omc-cd-services +- mzId: CD_omc-cd-services/management-zone/CDomc-cd-services.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDomc-cd-services-E2E: +- name: CD_omc-cd-services E2E +- tag: omc-cd-services +- mzId: CD_omc-cd-services/management-zone/CDomc-cd-services.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDomc-cd-services-E2E.EMEA-Prod: +- name: CD_omc-cd-services E2E +- tag: omc-cd-services +- mzId: CD_omc-cd-services/management-zone/CDomc-cd-services.id +- env: E2E +- skipDeployment: "false" +CDomc-cd-services-E2E.NA-Prod: +- name: CD_omc-cd-services E2E +- tag: omc-cd-services +- mzId: CD_omc-cd-services/management-zone/CDomc-cd-services.id +- env: E2E +- skipDeployment: "false" +CDomc-cd-services-E2E.CN-Prod: +- name: CD_omc-cd-services E2E +- tag: omc-cd-services +- mzId: CD_omc-cd-services/management-zone/CDomc-cd-services.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDomc-cd-services-INT: +- name: CD_omc-cd-services INT +- tag: omc-cd-services +- mzId: CD_omc-cd-services/management-zone/CDomc-cd-services.id +- env: INT +- skipDeployment: "true" +#Configuration +CDomc-cd-services-INT.EMEA-PreProd: +- name: CD_omc-cd-services INT +- tag: omc-cd-services +- mzId: CD_omc-cd-services/management-zone/CDomc-cd-services.id +- env: INT +- skipDeployment: "false" +CDomc-cd-services-INT.NA-PreProd: +- name: CD_omc-cd-services INT +- tag: omc-cd-services +- mzId: CD_omc-cd-services/management-zone/CDomc-cd-services.id +- env: INT +- skipDeployment: "false" +CDomc-cd-services-INT.CN-PreProd: +- name: CD_omc-cd-services INT +- tag: omc-cd-services +- mzId: CD_omc-cd-services/management-zone/CDomc-cd-services.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omc-cd-services/alerting-profile/default.json b/BMW-Dynatrace-config/CD_omc-cd-services/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_omc-cd-services/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omc-cd-services/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_omc-cd-services/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_omc-cd-services/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omc-cd-services/custom-service-java/README.md b/BMW-Dynatrace-config/CD_omc-cd-services/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_omc-cd-services/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omc-cd-services/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_omc-cd-services/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_omc-cd-services/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omc-cd-services/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_omc-cd-services/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_omc-cd-services/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omc-cd-services/dashboard/README.md b/BMW-Dynatrace-config/CD_omc-cd-services/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_omc-cd-services/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omc-cd-services/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_omc-cd-services/dashboard/dashboard.yaml new file mode 100644 index 00000000..ca7ecc6f --- /dev/null +++ b/BMW-Dynatrace-config/CD_omc-cd-services/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDomc-cd-services-PROD-E2E: defaultPRODE2E.json +- CDomc-cd-services-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDomc-cd-services-PROD-E2E: +- name: CD_omc-cd-services PROD +- mzName: CD_omc-cd-services/management-zone/CDomc-cd-services.name +- mzId: CD_omc-cd-services/management-zone/CDomc-cd-services.id +- skipDeployment: "true" +#Configuration +CDomc-cd-services-PROD-E2E.EMEA-Prod: +- name: CD_omc-cd-services PROD +- mzName: CD_omc-cd-services/management-zone/CDomc-cd-services.name +- mzId: CD_omc-cd-services/management-zone/CDomc-cd-services.id +- tag: omc-cd-services +- skipDeployment: "false" +CDomc-cd-services-PROD-E2E.NA-Prod: +- name: CD_omc-cd-services PROD +- mzName: CD_omc-cd-services/management-zone/CDomc-cd-services.name +- mzId: CD_omc-cd-services/management-zone/CDomc-cd-services.id +- tag: omc-cd-services +- skipDeployment: "false" +CDomc-cd-services-PROD-E2E.CN-Prod: +- name: CD_omc-cd-services PROD +- mzName: CD_omc-cd-services/management-zone/CDomc-cd-services.name +- mzId: CD_omc-cd-services/management-zone/CDomc-cd-services.id +- tag: omc-cd-services +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDomc-cd-services-INT-TEST: +- name: CD_omc-cd-services INT-TEST +- mzName: CD_omc-cd-services/management-zone/CDomc-cd-services.name +- mzId: CD_omc-cd-services/management-zone/CDomc-cd-services.id +- tag: omc-cd-services +- skipDeployment: "true" +#Configuration +CDomc-cd-services-INT-TEST.EMEA-PreProd: +- name: CD_omc-cd-services INT-TEST +- mzName: CD_omc-cd-services/management-zone/CDomc-cd-services.name +- mzId: CD_omc-cd-services/management-zone/CDomc-cd-services.id +- tag: omc-cd-services +- skipDeployment: "false" +CDomc-cd-services-INT-TEST.NA-PreProd: +- name: CD_omc-cd-services INT-TEST +- mzName: CD_omc-cd-services/management-zone/CDomc-cd-services.name +- mzId: CD_omc-cd-services/management-zone/CDomc-cd-services.id +- env: INT +- skipDeployment: "false" +CDomc-cd-services-INT-TEST.CN-PreProd: +- name: CD_omc-cd-services INT-TEST +- mzName: CD_omc-cd-services/management-zone/CDomc-cd-services.name +- mzId: CD_omc-cd-services/management-zone/CDomc-cd-services.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omc-cd-services/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_omc-cd-services/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_omc-cd-services/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omc-cd-services/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_omc-cd-services/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_omc-cd-services/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omc-cd-services/management-zone/README.md b/BMW-Dynatrace-config/CD_omc-cd-services/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_omc-cd-services/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_omc-cd-services/management-zone/default.json b/BMW-Dynatrace-config/CD_omc-cd-services/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_omc-cd-services/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omc-cd-services/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_omc-cd-services/management-zone/management-zone.yaml new file mode 100644 index 00000000..921bb76e --- /dev/null +++ b/BMW-Dynatrace-config/CD_omc-cd-services/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDomc-cd-services: default.json + +CDomc-cd-services: +- name: CD_omc-cd-services +- tag: omc-cd-services diff --git a/BMW-Dynatrace-config/CD_omc-cd-services/notification/README.md b/BMW-Dynatrace-config/CD_omc-cd-services/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_omc-cd-services/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omc-cd-services/notification/email.json b/BMW-Dynatrace-config/CD_omc-cd-services/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_omc-cd-services/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omc-cd-services/notification/msTeams.json b/BMW-Dynatrace-config/CD_omc-cd-services/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_omc-cd-services/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omc-cd-services/notification/notification.yaml b/BMW-Dynatrace-config/CD_omc-cd-services/notification/notification.yaml new file mode 100644 index 00000000..e9a024c3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_omc-cd-services/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDomc-cd-services-PROD: msTeams.json +- CDomc-cd-services-E2E: msTeams.json +- CDomc-cd-services-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDomc-cd-services-PROD: +- name: CD_omc-cd-services PROD +- alertingProfile: CD_omc-cd-services/alerting-profile/CDomc-cd-services-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDomc-cd-services-PROD.EMEA-Prod: +- name: CD_omc-cd-services PROD +- alertingProfile: CD_omc-cd-services/alerting-profile/CDomc-cd-services-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDomc-cd-services-PROD.NA-Prod: +- name: CD_omc-cd-services PROD +- alertingProfile: CD_omc-cd-services/alerting-profile/CDomc-cd-services-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDomc-cd-services-PROD.CN-Prod: +- name: CD_omc-cd-services PROD +- alertingProfile: CD_omc-cd-services/alerting-profile/CDomc-cd-services-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDomc-cd-services-E2E: +- name: CD_omc-cd-services E2E +- alertingProfile: CD_omc-cd-services/alerting-profile/CDomc-cd-services-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDomc-cd-services-E2E.EMEA-Prod: +- name: CD_omc-cd-services E2E +- alertingProfile: CD_omc-cd-services/alerting-profile/CDomc-cd-services-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDomc-cd-services-E2E.NA-Prod: +- name: CD_omc-cd-services E2E +- alertingProfile: CD_omc-cd-services/alerting-profile/CDomc-cd-services-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDomc-cd-services-E2E.CN-Prod: +- name: CD_omc-cd-services E2E +- alertingProfile: CD_omc-cd-services/alerting-profile/CDomc-cd-services-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDomc-cd-services-INT: +- name: CD_omc-cd-services INT +- alertingProfile: CD_omc-cd-services/alerting-profile/CDomc-cd-services-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDomc-cd-services-INT.EMEA-PreProd: +- name: CD_omc-cd-services INT +- alertingProfile: CD_omc-cd-services/alerting-profile/CDomc-cd-services-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDomc-cd-services-INT.NA-PreProd: +- name: CD_omc-cd-services INT +- alertingProfile: CD_omc-cd-services/alerting-profile/CDomc-cd-services-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDomc-cd-services-INT.CN-PreProd: +- name: CD_omc-cd-services INT +- alertingProfile: CD_omc-cd-services/alerting-profile/CDomc-cd-services-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omc-cd-services/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_omc-cd-services/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_omc-cd-services/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omc-cd-services/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_omc-cd-services/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_omc-cd-services/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omc-cd-services/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_omc-cd-services/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..d0b29f2f --- /dev/null +++ b/BMW-Dynatrace-config/CD_omc-cd-services/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- omc-cd-services: default.json + +omc-cd-services: +- name: CD_omc-cd-services - +- mzName: CD_omc-cd-services/management-zone/CDomc-cd-services.name +- mzId: CD_omc-cd-services/management-zone/CDomc-cd-services.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omg/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_omg/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..ecf6ed00 --- /dev/null +++ b/BMW-Dynatrace-config/CD_omg/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDomg-PROD: default.json +- CDomg-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDomg-PROD: +- name: CD_omg PROD +- tag: omg +- mzId: CD_omg/management-zone/CDomg.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDomg-PROD.EMEA-Prod: +- name: CD_omg PROD +- tag: omg +- mzId: CD_omg/management-zone/CDomg.id +- env: PROD +- skipDeployment: "false" +CDomg-PROD.NA-Prod: +- name: CD_omg PROD +- tag: omg +- mzId: CD_omg/management-zone/CDomg.id +- env: PROD +- skipDeployment: "false" +CDomg-PROD.CN-Prod: +- name: CD_omg PROD +- tag: omg +- mzId: CD_omg/management-zone/CDomg.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDomg-INT: +- name: CD_omg INT +- tag: omg +- mzId: CD_omg/management-zone/CDomg.id +- env: INT +- skipDeployment: "true" +#Configuration +CDomg-INT.EMEA-PreProd: +- name: CD_omg INT +- tag: omg +- mzId: CD_omg/management-zone/CDomg.id +- env: INT +- skipDeployment: "false" +CDomg-INT.NA-PreProd: +- name: CD_omg INT +- tag: omg +- mzId: CD_omg/management-zone/CDomg.id +- env: INT +- skipDeployment: "false" +CDomg-INT.CN-PreProd: +- name: CD_omg INT +- tag: omg +- mzId: CD_omg/management-zone/CDomg.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omg/alerting-profile/default.json b/BMW-Dynatrace-config/CD_omg/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_omg/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omg/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_omg/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_omg/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omg/custom-service-java/README.md b/BMW-Dynatrace-config/CD_omg/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_omg/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omg/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_omg/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_omg/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omg/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_omg/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_omg/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omg/dashboard/README.md b/BMW-Dynatrace-config/CD_omg/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_omg/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omg/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_omg/dashboard/dashboard.yaml new file mode 100644 index 00000000..461c22e3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_omg/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDomg-PROD-E2E: defaultPRODE2E.json +- CDomg-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDomg-PROD-E2E: +- name: CD_omg PROD-E2E +- mzName: CD_omg/management-zone/CDomg.name +- mzId: CD_omg/management-zone/CDomg.id +- skipDeployment: "true" +#Configuration +CDomg-PROD-E2E.EMEA-Prod: +- name: CD_omg PROD-E2E +- mzName: CD_omg/management-zone/CDomg.name +- mzId: CD_omg/management-zone/CDomg.id +- tag: omg +- skipDeployment: "false" +CDomg-PROD-E2E.NA-Prod: +- name: CD_omg PROD-E2E +- mzName: CD_omg/management-zone/CDomg.name +- mzId: CD_omg/management-zone/CDomg.id +- tag: omg +- skipDeployment: "false" +CDomg-PROD-E2E.CN-Prod: +- name: CD_omg PROD-E2E +- mzName: CD_omg/management-zone/CDomg.name +- mzId: CD_omg/management-zone/CDomg.id +- tag: omg +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDomg-INT-TEST: +- name: CD_omg INT-TEST +- mzName: CD_omg/management-zone/CDomg.name +- mzId: CD_omg/management-zone/CDomg.id +- tag: omg +- skipDeployment: "true" +#Configuration +CDomg-INT-TEST.EMEA-PreProd: +- name: CD_omg INT-TEST +- mzName: CD_omg/management-zone/CDomg.name +- mzId: CD_omg/management-zone/CDomg.id +- tag: omg +- skipDeployment: "false" +CDomg-INT-TEST.NA-PreProd: +- name: CD_omg INT-TEST +- mzName: CD_omg/management-zone/CDomg.name +- mzId: CD_omg/management-zone/CDomg.id +- env: INT +- skipDeployment: "false" +CDomg-INT-TEST.CN-PreProd: +- name: CD_omg INT-TEST +- mzName: CD_omg/management-zone/CDomg.name +- mzId: CD_omg/management-zone/CDomg.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omg/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_omg/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_omg/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omg/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_omg/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_omg/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omg/management-zone/README.md b/BMW-Dynatrace-config/CD_omg/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_omg/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_omg/management-zone/default.json b/BMW-Dynatrace-config/CD_omg/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_omg/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omg/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_omg/management-zone/management-zone.yaml new file mode 100644 index 00000000..9e18b5cd --- /dev/null +++ b/BMW-Dynatrace-config/CD_omg/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDomg: default.json + +CDomg: +- name: CD_omg +- tag: omg diff --git a/BMW-Dynatrace-config/CD_omg/notification/README.md b/BMW-Dynatrace-config/CD_omg/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_omg/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omg/notification/email.json b/BMW-Dynatrace-config/CD_omg/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_omg/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omg/notification/msTeams.json b/BMW-Dynatrace-config/CD_omg/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_omg/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omg/notification/notification.yaml b/BMW-Dynatrace-config/CD_omg/notification/notification.yaml new file mode 100644 index 00000000..2ef52146 --- /dev/null +++ b/BMW-Dynatrace-config/CD_omg/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDomg-PROD: msTeams.json +- CDomg-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDomg-PROD: +- name: CD_omg PROD +- alertingProfile: CD_omg/alerting-profile/CDomg-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDomg-PROD.EMEA-Prod: +- name: CD_omg PROD +- alertingProfile: CD_omg/alerting-profile/CDomg-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDomg-PROD.NA-Prod: +- name: CD_omg PROD +- alertingProfile: CD_omg/alerting-profile/CDomg-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDomg-PROD.CN-Prod: +- name: CD_omg PROD +- alertingProfile: CD_omg/alerting-profile/CDomg-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDomg-INT: +- name: CD_omg INT +- alertingProfile: CD_omg/alerting-profile/CDomg-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDomg-INT.EMEA-PreProd: +- name: CD_omg INT +- alertingProfile: CD_omg/alerting-profile/CDomg-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDomg-INT.NA-PreProd: +- name: CD_omg INT +- alertingProfile: CD_omg/alerting-profile/CDomg-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDomg-INT.CN-PreProd: +- name: CD_omg INT +- alertingProfile: CD_omg/alerting-profile/CDomg-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omg/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_omg/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_omg/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omg/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_omg/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_omg/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omg/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_omg/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..8b23bab7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_omg/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- omg: default.json + +omg: +- name: CD_omg - +- mzName: CD_omg/management-zone/CDomg.name +- mzId: CD_omg/management-zone/CDomg.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..b1b9c6ee --- /dev/null +++ b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDonboard-navigation-sync-service-PROD: default.json +- CDonboard-navigation-sync-service-E2E: default.json +- CDonboard-navigation-sync-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDonboard-navigation-sync-service-PROD: +- name: CD_onboard-navigation-sync-service PROD +- tag: onboard-navigation-sync-service +- mzId: CD_onboard-navigation-sync-service/management-zone/CDonboard-navigation-sync-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDonboard-navigation-sync-service-PROD.EMEA-Prod: +- name: CD_onboard-navigation-sync-service PROD +- tag: onboard-navigation-sync-service +- mzId: CD_onboard-navigation-sync-service/management-zone/CDonboard-navigation-sync-service.id +- env: PROD +- skipDeployment: "false" +CDonboard-navigation-sync-service-PROD.NA-Prod: +- name: CD_onboard-navigation-sync-service PROD +- tag: onboard-navigation-sync-service +- mzId: CD_onboard-navigation-sync-service/management-zone/CDonboard-navigation-sync-service.id +- env: PROD +- skipDeployment: "false" +CDonboard-navigation-sync-service-PROD.CN-Prod: +- name: CD_onboard-navigation-sync-service PROD +- tag: onboard-navigation-sync-service +- mzId: CD_onboard-navigation-sync-service/management-zone/CDonboard-navigation-sync-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDonboard-navigation-sync-service-E2E: +- name: CD_onboard-navigation-sync-service E2E +- tag: onboard-navigation-sync-service +- mzId: CD_onboard-navigation-sync-service/management-zone/CDonboard-navigation-sync-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDonboard-navigation-sync-service-E2E.EMEA-Prod: +- name: CD_onboard-navigation-sync-service E2E +- tag: onboard-navigation-sync-service +- mzId: CD_onboard-navigation-sync-service/management-zone/CDonboard-navigation-sync-service.id +- env: E2E +- skipDeployment: "false" +CDonboard-navigation-sync-service-E2E.NA-Prod: +- name: CD_onboard-navigation-sync-service E2E +- tag: onboard-navigation-sync-service +- mzId: CD_onboard-navigation-sync-service/management-zone/CDonboard-navigation-sync-service.id +- env: E2E +- skipDeployment: "false" +CDonboard-navigation-sync-service-E2E.CN-Prod: +- name: CD_onboard-navigation-sync-service E2E +- tag: onboard-navigation-sync-service +- mzId: CD_onboard-navigation-sync-service/management-zone/CDonboard-navigation-sync-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDonboard-navigation-sync-service-INT: +- name: CD_onboard-navigation-sync-service INT +- tag: onboard-navigation-sync-service +- mzId: CD_onboard-navigation-sync-service/management-zone/CDonboard-navigation-sync-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDonboard-navigation-sync-service-INT.EMEA-PreProd: +- name: CD_onboard-navigation-sync-service INT +- tag: onboard-navigation-sync-service +- mzId: CD_onboard-navigation-sync-service/management-zone/CDonboard-navigation-sync-service.id +- env: INT +- skipDeployment: "false" +CDonboard-navigation-sync-service-INT.NA-PreProd: +- name: CD_onboard-navigation-sync-service INT +- tag: onboard-navigation-sync-service +- mzId: CD_onboard-navigation-sync-service/management-zone/CDonboard-navigation-sync-service.id +- env: INT +- skipDeployment: "false" +CDonboard-navigation-sync-service-INT.CN-PreProd: +- name: CD_onboard-navigation-sync-service INT +- tag: onboard-navigation-sync-service +- mzId: CD_onboard-navigation-sync-service/management-zone/CDonboard-navigation-sync-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/dashboard/README.md b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..ef056552 --- /dev/null +++ b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDonboard-navigation-sync-service-PROD-E2E: defaultPRODE2E.json +- CDonboard-navigation-sync-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDonboard-navigation-sync-service-PROD-E2E: +- name: CD_onboard-navigation-sync-service PROD +- mzName: CD_onboard-navigation-sync-service/management-zone/CDonboard-navigation-sync-service.name +- mzId: CD_onboard-navigation-sync-service/management-zone/CDonboard-navigation-sync-service.id +- skipDeployment: "true" +#Configuration +CDonboard-navigation-sync-service-PROD-E2E.EMEA-Prod: +- name: CD_onboard-navigation-sync-service PROD +- mzName: CD_onboard-navigation-sync-service/management-zone/CDonboard-navigation-sync-service.name +- mzId: CD_onboard-navigation-sync-service/management-zone/CDonboard-navigation-sync-service.id +- tag: onboard-navigation-sync-service +- skipDeployment: "false" +CDonboard-navigation-sync-service-PROD-E2E.NA-Prod: +- name: CD_onboard-navigation-sync-service PROD +- mzName: CD_onboard-navigation-sync-service/management-zone/CDonboard-navigation-sync-service.name +- mzId: CD_onboard-navigation-sync-service/management-zone/CDonboard-navigation-sync-service.id +- tag: onboard-navigation-sync-service +- skipDeployment: "false" +CDonboard-navigation-sync-service-PROD-E2E.CN-Prod: +- name: CD_onboard-navigation-sync-service PROD +- mzName: CD_onboard-navigation-sync-service/management-zone/CDonboard-navigation-sync-service.name +- mzId: CD_onboard-navigation-sync-service/management-zone/CDonboard-navigation-sync-service.id +- tag: onboard-navigation-sync-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDonboard-navigation-sync-service-INT-TEST: +- name: CD_onboard-navigation-sync-service INT-TEST +- mzName: CD_onboard-navigation-sync-service/management-zone/CDonboard-navigation-sync-service.name +- mzId: CD_onboard-navigation-sync-service/management-zone/CDonboard-navigation-sync-service.id +- tag: onboard-navigation-sync-service +- skipDeployment: "true" +#Configuration +CDonboard-navigation-sync-service-INT-TEST.EMEA-PreProd: +- name: CD_onboard-navigation-sync-service INT-TEST +- mzName: CD_onboard-navigation-sync-service/management-zone/CDonboard-navigation-sync-service.name +- mzId: CD_onboard-navigation-sync-service/management-zone/CDonboard-navigation-sync-service.id +- tag: onboard-navigation-sync-service +- skipDeployment: "false" +CDonboard-navigation-sync-service-INT-TEST.NA-PreProd: +- name: CD_onboard-navigation-sync-service INT-TEST +- mzName: CD_onboard-navigation-sync-service/management-zone/CDonboard-navigation-sync-service.name +- mzId: CD_onboard-navigation-sync-service/management-zone/CDonboard-navigation-sync-service.id +- env: INT +- skipDeployment: "false" +CDonboard-navigation-sync-service-INT-TEST.CN-PreProd: +- name: CD_onboard-navigation-sync-service INT-TEST +- mzName: CD_onboard-navigation-sync-service/management-zone/CDonboard-navigation-sync-service.name +- mzId: CD_onboard-navigation-sync-service/management-zone/CDonboard-navigation-sync-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/management-zone/README.md b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/management-zone/default.json b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..e1263e4a --- /dev/null +++ b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDonboard-navigation-sync-service: default.json + +CDonboard-navigation-sync-service: +- name: CD_onboard-navigation-sync-service +- tag: onboard-navigation-sync-service diff --git a/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/notification/README.md b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/notification/email.json b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/notification/notification.yaml new file mode 100644 index 00000000..99042811 --- /dev/null +++ b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDonboard-navigation-sync-service-PROD: msTeams.json +- CDonboard-navigation-sync-service-E2E: msTeams.json +- CDonboard-navigation-sync-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDonboard-navigation-sync-service-PROD: +- name: CD_onboard-navigation-sync-service PROD +- alertingProfile: CD_onboard-navigation-sync-service/alerting-profile/CDonboard-navigation-sync-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDonboard-navigation-sync-service-PROD.EMEA-Prod: +- name: CD_onboard-navigation-sync-service PROD +- alertingProfile: CD_onboard-navigation-sync-service/alerting-profile/CDonboard-navigation-sync-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDonboard-navigation-sync-service-PROD.NA-Prod: +- name: CD_onboard-navigation-sync-service PROD +- alertingProfile: CD_onboard-navigation-sync-service/alerting-profile/CDonboard-navigation-sync-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDonboard-navigation-sync-service-PROD.CN-Prod: +- name: CD_onboard-navigation-sync-service PROD +- alertingProfile: CD_onboard-navigation-sync-service/alerting-profile/CDonboard-navigation-sync-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDonboard-navigation-sync-service-E2E: +- name: CD_onboard-navigation-sync-service E2E +- alertingProfile: CD_onboard-navigation-sync-service/alerting-profile/CDonboard-navigation-sync-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDonboard-navigation-sync-service-E2E.EMEA-Prod: +- name: CD_onboard-navigation-sync-service E2E +- alertingProfile: CD_onboard-navigation-sync-service/alerting-profile/CDonboard-navigation-sync-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDonboard-navigation-sync-service-E2E.NA-Prod: +- name: CD_onboard-navigation-sync-service E2E +- alertingProfile: CD_onboard-navigation-sync-service/alerting-profile/CDonboard-navigation-sync-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDonboard-navigation-sync-service-E2E.CN-Prod: +- name: CD_onboard-navigation-sync-service E2E +- alertingProfile: CD_onboard-navigation-sync-service/alerting-profile/CDonboard-navigation-sync-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDonboard-navigation-sync-service-INT: +- name: CD_onboard-navigation-sync-service INT +- alertingProfile: CD_onboard-navigation-sync-service/alerting-profile/CDonboard-navigation-sync-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDonboard-navigation-sync-service-INT.EMEA-PreProd: +- name: CD_onboard-navigation-sync-service INT +- alertingProfile: CD_onboard-navigation-sync-service/alerting-profile/CDonboard-navigation-sync-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDonboard-navigation-sync-service-INT.NA-PreProd: +- name: CD_onboard-navigation-sync-service INT +- alertingProfile: CD_onboard-navigation-sync-service/alerting-profile/CDonboard-navigation-sync-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDonboard-navigation-sync-service-INT.CN-PreProd: +- name: CD_onboard-navigation-sync-service INT +- alertingProfile: CD_onboard-navigation-sync-service/alerting-profile/CDonboard-navigation-sync-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..c06cefdf --- /dev/null +++ b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- onboard-navigation-sync-service: default.json + +onboard-navigation-sync-service: +- name: CD_onboard-navigation-sync-service - +- mzName: CD_onboard-navigation-sync-service/management-zone/CDonboard-navigation-sync-service.name +- mzId: CD_onboard-navigation-sync-service/management-zone/CDonboard-navigation-sync-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-appointment-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_online-appointment-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..493a464c --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-appointment-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDonline-appointment-service-PROD: default.json +- CDonline-appointment-service-E2E: default.json +- CDonline-appointment-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDonline-appointment-service-PROD: +- name: CD_online-appointment-service PROD +- tag: online-appointment-service +- mzId: CD_online-appointment-service/management-zone/CDonline-appointment-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDonline-appointment-service-PROD.EMEA-Prod: +- name: CD_online-appointment-service PROD +- tag: online-appointment-service +- mzId: CD_online-appointment-service/management-zone/CDonline-appointment-service.id +- env: PROD +- skipDeployment: "false" +CDonline-appointment-service-PROD.NA-Prod: +- name: CD_online-appointment-service PROD +- tag: online-appointment-service +- mzId: CD_online-appointment-service/management-zone/CDonline-appointment-service.id +- env: PROD +- skipDeployment: "false" +CDonline-appointment-service-PROD.CN-Prod: +- name: CD_online-appointment-service PROD +- tag: online-appointment-service +- mzId: CD_online-appointment-service/management-zone/CDonline-appointment-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDonline-appointment-service-E2E: +- name: CD_online-appointment-service E2E +- tag: online-appointment-service +- mzId: CD_online-appointment-service/management-zone/CDonline-appointment-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDonline-appointment-service-E2E.EMEA-Prod: +- name: CD_online-appointment-service E2E +- tag: online-appointment-service +- mzId: CD_online-appointment-service/management-zone/CDonline-appointment-service.id +- env: E2E +- skipDeployment: "false" +CDonline-appointment-service-E2E.NA-Prod: +- name: CD_online-appointment-service E2E +- tag: online-appointment-service +- mzId: CD_online-appointment-service/management-zone/CDonline-appointment-service.id +- env: E2E +- skipDeployment: "false" +CDonline-appointment-service-E2E.CN-Prod: +- name: CD_online-appointment-service E2E +- tag: online-appointment-service +- mzId: CD_online-appointment-service/management-zone/CDonline-appointment-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDonline-appointment-service-INT: +- name: CD_online-appointment-service INT +- tag: online-appointment-service +- mzId: CD_online-appointment-service/management-zone/CDonline-appointment-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDonline-appointment-service-INT.EMEA-PreProd: +- name: CD_online-appointment-service INT +- tag: online-appointment-service +- mzId: CD_online-appointment-service/management-zone/CDonline-appointment-service.id +- env: INT +- skipDeployment: "false" +CDonline-appointment-service-INT.NA-PreProd: +- name: CD_online-appointment-service INT +- tag: online-appointment-service +- mzId: CD_online-appointment-service/management-zone/CDonline-appointment-service.id +- env: INT +- skipDeployment: "false" +CDonline-appointment-service-INT.CN-PreProd: +- name: CD_online-appointment-service INT +- tag: online-appointment-service +- mzId: CD_online-appointment-service/management-zone/CDonline-appointment-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-appointment-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_online-appointment-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-appointment-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-appointment-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_online-appointment-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-appointment-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-appointment-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_online-appointment-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-appointment-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-appointment-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_online-appointment-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-appointment-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-appointment-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_online-appointment-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-appointment-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-appointment-service/dashboard/README.md b/BMW-Dynatrace-config/CD_online-appointment-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-appointment-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-appointment-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_online-appointment-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..478d0475 --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-appointment-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDonline-appointment-service-PROD-E2E: defaultPRODE2E.json +- CDonline-appointment-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDonline-appointment-service-PROD-E2E: +- name: CD_online-appointment-service PROD +- mzName: CD_online-appointment-service/management-zone/CDonline-appointment-service.name +- mzId: CD_online-appointment-service/management-zone/CDonline-appointment-service.id +- skipDeployment: "true" +#Configuration +CDonline-appointment-service-PROD-E2E.EMEA-Prod: +- name: CD_online-appointment-service PROD +- mzName: CD_online-appointment-service/management-zone/CDonline-appointment-service.name +- mzId: CD_online-appointment-service/management-zone/CDonline-appointment-service.id +- tag: online-appointment-service +- skipDeployment: "false" +CDonline-appointment-service-PROD-E2E.NA-Prod: +- name: CD_online-appointment-service PROD +- mzName: CD_online-appointment-service/management-zone/CDonline-appointment-service.name +- mzId: CD_online-appointment-service/management-zone/CDonline-appointment-service.id +- tag: online-appointment-service +- skipDeployment: "false" +CDonline-appointment-service-PROD-E2E.CN-Prod: +- name: CD_online-appointment-service PROD +- mzName: CD_online-appointment-service/management-zone/CDonline-appointment-service.name +- mzId: CD_online-appointment-service/management-zone/CDonline-appointment-service.id +- tag: online-appointment-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDonline-appointment-service-INT-TEST: +- name: CD_online-appointment-service INT-TEST +- mzName: CD_online-appointment-service/management-zone/CDonline-appointment-service.name +- mzId: CD_online-appointment-service/management-zone/CDonline-appointment-service.id +- tag: online-appointment-service +- skipDeployment: "true" +#Configuration +CDonline-appointment-service-INT-TEST.EMEA-PreProd: +- name: CD_online-appointment-service INT-TEST +- mzName: CD_online-appointment-service/management-zone/CDonline-appointment-service.name +- mzId: CD_online-appointment-service/management-zone/CDonline-appointment-service.id +- tag: online-appointment-service +- skipDeployment: "false" +CDonline-appointment-service-INT-TEST.NA-PreProd: +- name: CD_online-appointment-service INT-TEST +- mzName: CD_online-appointment-service/management-zone/CDonline-appointment-service.name +- mzId: CD_online-appointment-service/management-zone/CDonline-appointment-service.id +- env: INT +- skipDeployment: "false" +CDonline-appointment-service-INT-TEST.CN-PreProd: +- name: CD_online-appointment-service INT-TEST +- mzName: CD_online-appointment-service/management-zone/CDonline-appointment-service.name +- mzId: CD_online-appointment-service/management-zone/CDonline-appointment-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-appointment-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_online-appointment-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-appointment-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-appointment-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_online-appointment-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-appointment-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-appointment-service/management-zone/README.md b/BMW-Dynatrace-config/CD_online-appointment-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-appointment-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_online-appointment-service/management-zone/default.json b/BMW-Dynatrace-config/CD_online-appointment-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-appointment-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-appointment-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_online-appointment-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..0e46890c --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-appointment-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDonline-appointment-service: default.json + +CDonline-appointment-service: +- name: CD_online-appointment-service +- tag: online-appointment-service diff --git a/BMW-Dynatrace-config/CD_online-appointment-service/notification/README.md b/BMW-Dynatrace-config/CD_online-appointment-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-appointment-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-appointment-service/notification/email.json b/BMW-Dynatrace-config/CD_online-appointment-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-appointment-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-appointment-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_online-appointment-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-appointment-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-appointment-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_online-appointment-service/notification/notification.yaml new file mode 100644 index 00000000..8cde46df --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-appointment-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDonline-appointment-service-PROD: msTeams.json +- CDonline-appointment-service-E2E: msTeams.json +- CDonline-appointment-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDonline-appointment-service-PROD: +- name: CD_online-appointment-service PROD +- alertingProfile: CD_online-appointment-service/alerting-profile/CDonline-appointment-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDonline-appointment-service-PROD.EMEA-Prod: +- name: CD_online-appointment-service PROD +- alertingProfile: CD_online-appointment-service/alerting-profile/CDonline-appointment-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDonline-appointment-service-PROD.NA-Prod: +- name: CD_online-appointment-service PROD +- alertingProfile: CD_online-appointment-service/alerting-profile/CDonline-appointment-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDonline-appointment-service-PROD.CN-Prod: +- name: CD_online-appointment-service PROD +- alertingProfile: CD_online-appointment-service/alerting-profile/CDonline-appointment-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDonline-appointment-service-E2E: +- name: CD_online-appointment-service E2E +- alertingProfile: CD_online-appointment-service/alerting-profile/CDonline-appointment-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDonline-appointment-service-E2E.EMEA-Prod: +- name: CD_online-appointment-service E2E +- alertingProfile: CD_online-appointment-service/alerting-profile/CDonline-appointment-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDonline-appointment-service-E2E.NA-Prod: +- name: CD_online-appointment-service E2E +- alertingProfile: CD_online-appointment-service/alerting-profile/CDonline-appointment-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDonline-appointment-service-E2E.CN-Prod: +- name: CD_online-appointment-service E2E +- alertingProfile: CD_online-appointment-service/alerting-profile/CDonline-appointment-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDonline-appointment-service-INT: +- name: CD_online-appointment-service INT +- alertingProfile: CD_online-appointment-service/alerting-profile/CDonline-appointment-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDonline-appointment-service-INT.EMEA-PreProd: +- name: CD_online-appointment-service INT +- alertingProfile: CD_online-appointment-service/alerting-profile/CDonline-appointment-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDonline-appointment-service-INT.NA-PreProd: +- name: CD_online-appointment-service INT +- alertingProfile: CD_online-appointment-service/alerting-profile/CDonline-appointment-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDonline-appointment-service-INT.CN-PreProd: +- name: CD_online-appointment-service INT +- alertingProfile: CD_online-appointment-service/alerting-profile/CDonline-appointment-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-appointment-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_online-appointment-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-appointment-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-appointment-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_online-appointment-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-appointment-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-appointment-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_online-appointment-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..062b8f76 --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-appointment-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- online-appointment-service: default.json + +online-appointment-service: +- name: CD_online-appointment-service - +- mzName: CD_online-appointment-service/management-zone/CDonline-appointment-service.name +- mzId: CD_online-appointment-service/management-zone/CDonline-appointment-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-entertainment/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_online-entertainment/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..72fa49ad --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-entertainment/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDonline-entertainment-PROD: default.json +- CDonline-entertainment-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDonline-entertainment-PROD: +- name: CD_online-entertainment PROD +- tag: online-entertainment +- mzId: CD_online-entertainment/management-zone/CDonline-entertainment.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDonline-entertainment-PROD.EMEA-Prod: +- name: CD_online-entertainment PROD +- tag: online-entertainment +- mzId: CD_online-entertainment/management-zone/CDonline-entertainment.id +- env: PROD +- skipDeployment: "false" +CDonline-entertainment-PROD.NA-Prod: +- name: CD_online-entertainment PROD +- tag: online-entertainment +- mzId: CD_online-entertainment/management-zone/CDonline-entertainment.id +- env: PROD +- skipDeployment: "false" +CDonline-entertainment-PROD.CN-Prod: +- name: CD_online-entertainment PROD +- tag: online-entertainment +- mzId: CD_online-entertainment/management-zone/CDonline-entertainment.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDonline-entertainment-INT: +- name: CD_online-entertainment INT +- tag: online-entertainment +- mzId: CD_online-entertainment/management-zone/CDonline-entertainment.id +- env: INT +- skipDeployment: "true" +#Configuration +CDonline-entertainment-INT.EMEA-PreProd: +- name: CD_online-entertainment INT +- tag: online-entertainment +- mzId: CD_online-entertainment/management-zone/CDonline-entertainment.id +- env: INT +- skipDeployment: "false" +CDonline-entertainment-INT.NA-PreProd: +- name: CD_online-entertainment INT +- tag: online-entertainment +- mzId: CD_online-entertainment/management-zone/CDonline-entertainment.id +- env: INT +- skipDeployment: "false" +CDonline-entertainment-INT.CN-PreProd: +- name: CD_online-entertainment INT +- tag: online-entertainment +- mzId: CD_online-entertainment/management-zone/CDonline-entertainment.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-entertainment/alerting-profile/default.json b/BMW-Dynatrace-config/CD_online-entertainment/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-entertainment/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-entertainment/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_online-entertainment/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-entertainment/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-entertainment/custom-service-java/README.md b/BMW-Dynatrace-config/CD_online-entertainment/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-entertainment/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-entertainment/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_online-entertainment/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-entertainment/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-entertainment/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_online-entertainment/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-entertainment/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-entertainment/dashboard/README.md b/BMW-Dynatrace-config/CD_online-entertainment/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-entertainment/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-entertainment/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_online-entertainment/dashboard/dashboard.yaml new file mode 100644 index 00000000..855a77b5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-entertainment/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDonline-entertainment-PROD-E2E: defaultPRODE2E.json +- CDonline-entertainment-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDonline-entertainment-PROD-E2E: +- name: CD_online-entertainment PROD-E2E +- mzName: CD_online-entertainment/management-zone/CDonline-entertainment.name +- mzId: CD_online-entertainment/management-zone/CDonline-entertainment.id +- skipDeployment: "true" +#Configuration +CDonline-entertainment-PROD-E2E.EMEA-Prod: +- name: CD_online-entertainment PROD-E2E +- mzName: CD_online-entertainment/management-zone/CDonline-entertainment.name +- mzId: CD_online-entertainment/management-zone/CDonline-entertainment.id +- tag: online-entertainment +- skipDeployment: "false" +CDonline-entertainment-PROD-E2E.NA-Prod: +- name: CD_online-entertainment PROD-E2E +- mzName: CD_online-entertainment/management-zone/CDonline-entertainment.name +- mzId: CD_online-entertainment/management-zone/CDonline-entertainment.id +- tag: online-entertainment +- skipDeployment: "false" +CDonline-entertainment-PROD-E2E.CN-Prod: +- name: CD_online-entertainment PROD-E2E +- mzName: CD_online-entertainment/management-zone/CDonline-entertainment.name +- mzId: CD_online-entertainment/management-zone/CDonline-entertainment.id +- tag: online-entertainment +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDonline-entertainment-INT-TEST: +- name: CD_online-entertainment INT-TEST +- mzName: CD_online-entertainment/management-zone/CDonline-entertainment.name +- mzId: CD_online-entertainment/management-zone/CDonline-entertainment.id +- tag: online-entertainment +- skipDeployment: "true" +#Configuration +CDonline-entertainment-INT-TEST.EMEA-PreProd: +- name: CD_online-entertainment INT-TEST +- mzName: CD_online-entertainment/management-zone/CDonline-entertainment.name +- mzId: CD_online-entertainment/management-zone/CDonline-entertainment.id +- tag: online-entertainment +- skipDeployment: "false" +CDonline-entertainment-INT-TEST.NA-PreProd: +- name: CD_online-entertainment INT-TEST +- mzName: CD_online-entertainment/management-zone/CDonline-entertainment.name +- mzId: CD_online-entertainment/management-zone/CDonline-entertainment.id +- env: INT +- skipDeployment: "false" +CDonline-entertainment-INT-TEST.CN-PreProd: +- name: CD_online-entertainment INT-TEST +- mzName: CD_online-entertainment/management-zone/CDonline-entertainment.name +- mzId: CD_online-entertainment/management-zone/CDonline-entertainment.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-entertainment/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_online-entertainment/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-entertainment/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-entertainment/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_online-entertainment/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-entertainment/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-entertainment/management-zone/README.md b/BMW-Dynatrace-config/CD_online-entertainment/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-entertainment/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_online-entertainment/management-zone/default.json b/BMW-Dynatrace-config/CD_online-entertainment/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-entertainment/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-entertainment/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_online-entertainment/management-zone/management-zone.yaml new file mode 100644 index 00000000..80686b4d --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-entertainment/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDonline-entertainment: default.json + +CDonline-entertainment: +- name: CD_online-entertainment +- tag: online-entertainment diff --git a/BMW-Dynatrace-config/CD_online-entertainment/notification/README.md b/BMW-Dynatrace-config/CD_online-entertainment/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-entertainment/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-entertainment/notification/email.json b/BMW-Dynatrace-config/CD_online-entertainment/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-entertainment/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-entertainment/notification/msTeams.json b/BMW-Dynatrace-config/CD_online-entertainment/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-entertainment/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-entertainment/notification/notification.yaml b/BMW-Dynatrace-config/CD_online-entertainment/notification/notification.yaml new file mode 100644 index 00000000..1303adde --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-entertainment/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDonline-entertainment-PROD: msTeams.json +- CDonline-entertainment-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDonline-entertainment-PROD: +- name: CD_online-entertainment PROD +- alertingProfile: CD_online-entertainment/alerting-profile/CDonline-entertainment-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDonline-entertainment-PROD.EMEA-Prod: +- name: CD_online-entertainment PROD +- alertingProfile: CD_online-entertainment/alerting-profile/CDonline-entertainment-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDonline-entertainment-PROD.NA-Prod: +- name: CD_online-entertainment PROD +- alertingProfile: CD_online-entertainment/alerting-profile/CDonline-entertainment-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDonline-entertainment-PROD.CN-Prod: +- name: CD_online-entertainment PROD +- alertingProfile: CD_online-entertainment/alerting-profile/CDonline-entertainment-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDonline-entertainment-INT: +- name: CD_online-entertainment INT +- alertingProfile: CD_online-entertainment/alerting-profile/CDonline-entertainment-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDonline-entertainment-INT.EMEA-PreProd: +- name: CD_online-entertainment INT +- alertingProfile: CD_online-entertainment/alerting-profile/CDonline-entertainment-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDonline-entertainment-INT.NA-PreProd: +- name: CD_online-entertainment INT +- alertingProfile: CD_online-entertainment/alerting-profile/CDonline-entertainment-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDonline-entertainment-INT.CN-PreProd: +- name: CD_online-entertainment INT +- alertingProfile: CD_online-entertainment/alerting-profile/CDonline-entertainment-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-entertainment/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_online-entertainment/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-entertainment/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-entertainment/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_online-entertainment/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-entertainment/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-entertainment/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_online-entertainment/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..ce6f69a3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-entertainment/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- online-entertainment: default.json + +online-entertainment: +- name: CD_online-entertainment - +- mzName: CD_online-entertainment/management-zone/CDonline-entertainment.name +- mzId: CD_online-entertainment/management-zone/CDonline-entertainment.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pdmmanager/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_pdmmanager/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..c97b3eb0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_pdmmanager/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDpdmmanager-PROD: default.json +- CDpdmmanager-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDpdmmanager-PROD: +- name: CD_pdmmanager PROD +- tag: pdmmanager +- mzId: CD_pdmmanager/management-zone/CDpdmmanager.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDpdmmanager-PROD.EMEA-Prod: +- name: CD_pdmmanager PROD +- tag: pdmmanager +- mzId: CD_pdmmanager/management-zone/CDpdmmanager.id +- env: PROD +- skipDeployment: "false" +CDpdmmanager-PROD.NA-Prod: +- name: CD_pdmmanager PROD +- tag: pdmmanager +- mzId: CD_pdmmanager/management-zone/CDpdmmanager.id +- env: PROD +- skipDeployment: "false" +CDpdmmanager-PROD.CN-Prod: +- name: CD_pdmmanager PROD +- tag: pdmmanager +- mzId: CD_pdmmanager/management-zone/CDpdmmanager.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDpdmmanager-INT: +- name: CD_pdmmanager INT +- tag: pdmmanager +- mzId: CD_pdmmanager/management-zone/CDpdmmanager.id +- env: INT +- skipDeployment: "true" +#Configuration +CDpdmmanager-INT.EMEA-PreProd: +- name: CD_pdmmanager INT +- tag: pdmmanager +- mzId: CD_pdmmanager/management-zone/CDpdmmanager.id +- env: INT +- skipDeployment: "false" +CDpdmmanager-INT.NA-PreProd: +- name: CD_pdmmanager INT +- tag: pdmmanager +- mzId: CD_pdmmanager/management-zone/CDpdmmanager.id +- env: INT +- skipDeployment: "false" +CDpdmmanager-INT.CN-PreProd: +- name: CD_pdmmanager INT +- tag: pdmmanager +- mzId: CD_pdmmanager/management-zone/CDpdmmanager.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pdmmanager/alerting-profile/default.json b/BMW-Dynatrace-config/CD_pdmmanager/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_pdmmanager/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pdmmanager/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_pdmmanager/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_pdmmanager/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pdmmanager/custom-service-java/README.md b/BMW-Dynatrace-config/CD_pdmmanager/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_pdmmanager/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pdmmanager/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_pdmmanager/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_pdmmanager/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pdmmanager/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_pdmmanager/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_pdmmanager/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pdmmanager/dashboard/README.md b/BMW-Dynatrace-config/CD_pdmmanager/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_pdmmanager/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pdmmanager/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_pdmmanager/dashboard/dashboard.yaml new file mode 100644 index 00000000..2c5eea90 --- /dev/null +++ b/BMW-Dynatrace-config/CD_pdmmanager/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDpdmmanager-PROD-E2E: defaultPRODE2E.json +- CDpdmmanager-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDpdmmanager-PROD-E2E: +- name: CD_pdmmanager PROD-E2E +- mzName: CD_pdmmanager/management-zone/CDpdmmanager.name +- mzId: CD_pdmmanager/management-zone/CDpdmmanager.id +- skipDeployment: "true" +#Configuration +CDpdmmanager-PROD-E2E.EMEA-Prod: +- name: CD_pdmmanager PROD-E2E +- mzName: CD_pdmmanager/management-zone/CDpdmmanager.name +- mzId: CD_pdmmanager/management-zone/CDpdmmanager.id +- tag: pdmmanager +- skipDeployment: "false" +CDpdmmanager-PROD-E2E.NA-Prod: +- name: CD_pdmmanager PROD-E2E +- mzName: CD_pdmmanager/management-zone/CDpdmmanager.name +- mzId: CD_pdmmanager/management-zone/CDpdmmanager.id +- tag: pdmmanager +- skipDeployment: "false" +CDpdmmanager-PROD-E2E.CN-Prod: +- name: CD_pdmmanager PROD-E2E +- mzName: CD_pdmmanager/management-zone/CDpdmmanager.name +- mzId: CD_pdmmanager/management-zone/CDpdmmanager.id +- tag: pdmmanager +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDpdmmanager-INT-TEST: +- name: CD_pdmmanager INT-TEST +- mzName: CD_pdmmanager/management-zone/CDpdmmanager.name +- mzId: CD_pdmmanager/management-zone/CDpdmmanager.id +- tag: pdmmanager +- skipDeployment: "true" +#Configuration +CDpdmmanager-INT-TEST.EMEA-PreProd: +- name: CD_pdmmanager INT-TEST +- mzName: CD_pdmmanager/management-zone/CDpdmmanager.name +- mzId: CD_pdmmanager/management-zone/CDpdmmanager.id +- tag: pdmmanager +- skipDeployment: "false" +CDpdmmanager-INT-TEST.NA-PreProd: +- name: CD_pdmmanager INT-TEST +- mzName: CD_pdmmanager/management-zone/CDpdmmanager.name +- mzId: CD_pdmmanager/management-zone/CDpdmmanager.id +- env: INT +- skipDeployment: "false" +CDpdmmanager-INT-TEST.CN-PreProd: +- name: CD_pdmmanager INT-TEST +- mzName: CD_pdmmanager/management-zone/CDpdmmanager.name +- mzId: CD_pdmmanager/management-zone/CDpdmmanager.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pdmmanager/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_pdmmanager/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_pdmmanager/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pdmmanager/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_pdmmanager/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_pdmmanager/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pdmmanager/management-zone/README.md b/BMW-Dynatrace-config/CD_pdmmanager/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_pdmmanager/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_pdmmanager/management-zone/default.json b/BMW-Dynatrace-config/CD_pdmmanager/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_pdmmanager/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pdmmanager/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_pdmmanager/management-zone/management-zone.yaml new file mode 100644 index 00000000..366f22e5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_pdmmanager/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDpdmmanager: default.json + +CDpdmmanager: +- name: CD_pdmmanager +- tag: pdmmanager diff --git a/BMW-Dynatrace-config/CD_pdmmanager/notification/README.md b/BMW-Dynatrace-config/CD_pdmmanager/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_pdmmanager/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pdmmanager/notification/email.json b/BMW-Dynatrace-config/CD_pdmmanager/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_pdmmanager/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pdmmanager/notification/msTeams.json b/BMW-Dynatrace-config/CD_pdmmanager/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_pdmmanager/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pdmmanager/notification/notification.yaml b/BMW-Dynatrace-config/CD_pdmmanager/notification/notification.yaml new file mode 100644 index 00000000..553a9430 --- /dev/null +++ b/BMW-Dynatrace-config/CD_pdmmanager/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDpdmmanager-PROD: msTeams.json +- CDpdmmanager-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDpdmmanager-PROD: +- name: CD_pdmmanager PROD +- alertingProfile: CD_pdmmanager/alerting-profile/CDpdmmanager-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDpdmmanager-PROD.EMEA-Prod: +- name: CD_pdmmanager PROD +- alertingProfile: CD_pdmmanager/alerting-profile/CDpdmmanager-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDpdmmanager-PROD.NA-Prod: +- name: CD_pdmmanager PROD +- alertingProfile: CD_pdmmanager/alerting-profile/CDpdmmanager-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDpdmmanager-PROD.CN-Prod: +- name: CD_pdmmanager PROD +- alertingProfile: CD_pdmmanager/alerting-profile/CDpdmmanager-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDpdmmanager-INT: +- name: CD_pdmmanager INT +- alertingProfile: CD_pdmmanager/alerting-profile/CDpdmmanager-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDpdmmanager-INT.EMEA-PreProd: +- name: CD_pdmmanager INT +- alertingProfile: CD_pdmmanager/alerting-profile/CDpdmmanager-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDpdmmanager-INT.NA-PreProd: +- name: CD_pdmmanager INT +- alertingProfile: CD_pdmmanager/alerting-profile/CDpdmmanager-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDpdmmanager-INT.CN-PreProd: +- name: CD_pdmmanager INT +- alertingProfile: CD_pdmmanager/alerting-profile/CDpdmmanager-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pdmmanager/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_pdmmanager/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_pdmmanager/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pdmmanager/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_pdmmanager/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_pdmmanager/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pdmmanager/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_pdmmanager/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..76a6fd1e --- /dev/null +++ b/BMW-Dynatrace-config/CD_pdmmanager/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- pdmmanager: default.json + +pdmmanager: +- name: CD_pdmmanager - +- mzName: CD_pdmmanager/management-zone/CDpdmmanager.name +- mzId: CD_pdmmanager/management-zone/CDpdmmanager.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_personal-data-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_personal-data-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..f7788e8f --- /dev/null +++ b/BMW-Dynatrace-config/CD_personal-data-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDpersonal-data-service-PROD: default.json +- CDpersonal-data-service-E2E: default.json +- CDpersonal-data-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDpersonal-data-service-PROD: +- name: CD_personal-data-service PROD +- tag: personal-data-service +- mzId: CD_personal-data-service/management-zone/CDpersonal-data-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDpersonal-data-service-PROD.EMEA-Prod: +- name: CD_personal-data-service PROD +- tag: personal-data-service +- mzId: CD_personal-data-service/management-zone/CDpersonal-data-service.id +- env: PROD +- skipDeployment: "false" +CDpersonal-data-service-PROD.NA-Prod: +- name: CD_personal-data-service PROD +- tag: personal-data-service +- mzId: CD_personal-data-service/management-zone/CDpersonal-data-service.id +- env: PROD +- skipDeployment: "false" +CDpersonal-data-service-PROD.CN-Prod: +- name: CD_personal-data-service PROD +- tag: personal-data-service +- mzId: CD_personal-data-service/management-zone/CDpersonal-data-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDpersonal-data-service-E2E: +- name: CD_personal-data-service E2E +- tag: personal-data-service +- mzId: CD_personal-data-service/management-zone/CDpersonal-data-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDpersonal-data-service-E2E.EMEA-Prod: +- name: CD_personal-data-service E2E +- tag: personal-data-service +- mzId: CD_personal-data-service/management-zone/CDpersonal-data-service.id +- env: E2E +- skipDeployment: "false" +CDpersonal-data-service-E2E.NA-Prod: +- name: CD_personal-data-service E2E +- tag: personal-data-service +- mzId: CD_personal-data-service/management-zone/CDpersonal-data-service.id +- env: E2E +- skipDeployment: "false" +CDpersonal-data-service-E2E.CN-Prod: +- name: CD_personal-data-service E2E +- tag: personal-data-service +- mzId: CD_personal-data-service/management-zone/CDpersonal-data-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDpersonal-data-service-INT: +- name: CD_personal-data-service INT +- tag: personal-data-service +- mzId: CD_personal-data-service/management-zone/CDpersonal-data-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDpersonal-data-service-INT.EMEA-PreProd: +- name: CD_personal-data-service INT +- tag: personal-data-service +- mzId: CD_personal-data-service/management-zone/CDpersonal-data-service.id +- env: INT +- skipDeployment: "false" +CDpersonal-data-service-INT.NA-PreProd: +- name: CD_personal-data-service INT +- tag: personal-data-service +- mzId: CD_personal-data-service/management-zone/CDpersonal-data-service.id +- env: INT +- skipDeployment: "false" +CDpersonal-data-service-INT.CN-PreProd: +- name: CD_personal-data-service INT +- tag: personal-data-service +- mzId: CD_personal-data-service/management-zone/CDpersonal-data-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_personal-data-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_personal-data-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_personal-data-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_personal-data-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_personal-data-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_personal-data-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_personal-data-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_personal-data-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_personal-data-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_personal-data-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_personal-data-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_personal-data-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_personal-data-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_personal-data-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_personal-data-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_personal-data-service/dashboard/README.md b/BMW-Dynatrace-config/CD_personal-data-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_personal-data-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_personal-data-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_personal-data-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..73711e10 --- /dev/null +++ b/BMW-Dynatrace-config/CD_personal-data-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDpersonal-data-service-PROD-E2E: defaultPRODE2E.json +- CDpersonal-data-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDpersonal-data-service-PROD-E2E: +- name: CD_personal-data-service PROD +- mzName: CD_personal-data-service/management-zone/CDpersonal-data-service.name +- mzId: CD_personal-data-service/management-zone/CDpersonal-data-service.id +- skipDeployment: "true" +#Configuration +CDpersonal-data-service-PROD-E2E.EMEA-Prod: +- name: CD_personal-data-service PROD +- mzName: CD_personal-data-service/management-zone/CDpersonal-data-service.name +- mzId: CD_personal-data-service/management-zone/CDpersonal-data-service.id +- tag: personal-data-service +- skipDeployment: "false" +CDpersonal-data-service-PROD-E2E.NA-Prod: +- name: CD_personal-data-service PROD +- mzName: CD_personal-data-service/management-zone/CDpersonal-data-service.name +- mzId: CD_personal-data-service/management-zone/CDpersonal-data-service.id +- tag: personal-data-service +- skipDeployment: "false" +CDpersonal-data-service-PROD-E2E.CN-Prod: +- name: CD_personal-data-service PROD +- mzName: CD_personal-data-service/management-zone/CDpersonal-data-service.name +- mzId: CD_personal-data-service/management-zone/CDpersonal-data-service.id +- tag: personal-data-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDpersonal-data-service-INT-TEST: +- name: CD_personal-data-service INT-TEST +- mzName: CD_personal-data-service/management-zone/CDpersonal-data-service.name +- mzId: CD_personal-data-service/management-zone/CDpersonal-data-service.id +- tag: personal-data-service +- skipDeployment: "true" +#Configuration +CDpersonal-data-service-INT-TEST.EMEA-PreProd: +- name: CD_personal-data-service INT-TEST +- mzName: CD_personal-data-service/management-zone/CDpersonal-data-service.name +- mzId: CD_personal-data-service/management-zone/CDpersonal-data-service.id +- tag: personal-data-service +- skipDeployment: "false" +CDpersonal-data-service-INT-TEST.NA-PreProd: +- name: CD_personal-data-service INT-TEST +- mzName: CD_personal-data-service/management-zone/CDpersonal-data-service.name +- mzId: CD_personal-data-service/management-zone/CDpersonal-data-service.id +- env: INT +- skipDeployment: "false" +CDpersonal-data-service-INT-TEST.CN-PreProd: +- name: CD_personal-data-service INT-TEST +- mzName: CD_personal-data-service/management-zone/CDpersonal-data-service.name +- mzId: CD_personal-data-service/management-zone/CDpersonal-data-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_personal-data-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_personal-data-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_personal-data-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_personal-data-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_personal-data-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_personal-data-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_personal-data-service/management-zone/README.md b/BMW-Dynatrace-config/CD_personal-data-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_personal-data-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_personal-data-service/management-zone/default.json b/BMW-Dynatrace-config/CD_personal-data-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_personal-data-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_personal-data-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_personal-data-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..00832eb6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_personal-data-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDpersonal-data-service: default.json + +CDpersonal-data-service: +- name: CD_personal-data-service +- tag: personal-data-service diff --git a/BMW-Dynatrace-config/CD_personal-data-service/notification/README.md b/BMW-Dynatrace-config/CD_personal-data-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_personal-data-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_personal-data-service/notification/email.json b/BMW-Dynatrace-config/CD_personal-data-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_personal-data-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_personal-data-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_personal-data-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_personal-data-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_personal-data-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_personal-data-service/notification/notification.yaml new file mode 100644 index 00000000..5085b37d --- /dev/null +++ b/BMW-Dynatrace-config/CD_personal-data-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDpersonal-data-service-PROD: msTeams.json +- CDpersonal-data-service-E2E: msTeams.json +- CDpersonal-data-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDpersonal-data-service-PROD: +- name: CD_personal-data-service PROD +- alertingProfile: CD_personal-data-service/alerting-profile/CDpersonal-data-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDpersonal-data-service-PROD.EMEA-Prod: +- name: CD_personal-data-service PROD +- alertingProfile: CD_personal-data-service/alerting-profile/CDpersonal-data-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDpersonal-data-service-PROD.NA-Prod: +- name: CD_personal-data-service PROD +- alertingProfile: CD_personal-data-service/alerting-profile/CDpersonal-data-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDpersonal-data-service-PROD.CN-Prod: +- name: CD_personal-data-service PROD +- alertingProfile: CD_personal-data-service/alerting-profile/CDpersonal-data-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDpersonal-data-service-E2E: +- name: CD_personal-data-service E2E +- alertingProfile: CD_personal-data-service/alerting-profile/CDpersonal-data-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDpersonal-data-service-E2E.EMEA-Prod: +- name: CD_personal-data-service E2E +- alertingProfile: CD_personal-data-service/alerting-profile/CDpersonal-data-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDpersonal-data-service-E2E.NA-Prod: +- name: CD_personal-data-service E2E +- alertingProfile: CD_personal-data-service/alerting-profile/CDpersonal-data-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDpersonal-data-service-E2E.CN-Prod: +- name: CD_personal-data-service E2E +- alertingProfile: CD_personal-data-service/alerting-profile/CDpersonal-data-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDpersonal-data-service-INT: +- name: CD_personal-data-service INT +- alertingProfile: CD_personal-data-service/alerting-profile/CDpersonal-data-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDpersonal-data-service-INT.EMEA-PreProd: +- name: CD_personal-data-service INT +- alertingProfile: CD_personal-data-service/alerting-profile/CDpersonal-data-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDpersonal-data-service-INT.NA-PreProd: +- name: CD_personal-data-service INT +- alertingProfile: CD_personal-data-service/alerting-profile/CDpersonal-data-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDpersonal-data-service-INT.CN-PreProd: +- name: CD_personal-data-service INT +- alertingProfile: CD_personal-data-service/alerting-profile/CDpersonal-data-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_personal-data-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_personal-data-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_personal-data-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_personal-data-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_personal-data-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_personal-data-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_personal-data-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_personal-data-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..27257839 --- /dev/null +++ b/BMW-Dynatrace-config/CD_personal-data-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- personal-data-service: default.json + +personal-data-service: +- name: CD_personal-data-service - +- mzName: CD_personal-data-service/management-zone/CDpersonal-data-service.name +- mzId: CD_personal-data-service/management-zone/CDpersonal-data-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pmuimapper-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_pmuimapper-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..1297d865 --- /dev/null +++ b/BMW-Dynatrace-config/CD_pmuimapper-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDpmuimapper-service-PROD: default.json +- CDpmuimapper-service-E2E: default.json +- CDpmuimapper-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDpmuimapper-service-PROD: +- name: CD_pmuimapper-service PROD +- tag: pmuimapper-service +- mzId: CD_pmuimapper-service/management-zone/CDpmuimapper-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDpmuimapper-service-PROD.EMEA-Prod: +- name: CD_pmuimapper-service PROD +- tag: pmuimapper-service +- mzId: CD_pmuimapper-service/management-zone/CDpmuimapper-service.id +- env: PROD +- skipDeployment: "false" +CDpmuimapper-service-PROD.NA-Prod: +- name: CD_pmuimapper-service PROD +- tag: pmuimapper-service +- mzId: CD_pmuimapper-service/management-zone/CDpmuimapper-service.id +- env: PROD +- skipDeployment: "false" +CDpmuimapper-service-PROD.CN-Prod: +- name: CD_pmuimapper-service PROD +- tag: pmuimapper-service +- mzId: CD_pmuimapper-service/management-zone/CDpmuimapper-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDpmuimapper-service-E2E: +- name: CD_pmuimapper-service E2E +- tag: pmuimapper-service +- mzId: CD_pmuimapper-service/management-zone/CDpmuimapper-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDpmuimapper-service-E2E.EMEA-Prod: +- name: CD_pmuimapper-service E2E +- tag: pmuimapper-service +- mzId: CD_pmuimapper-service/management-zone/CDpmuimapper-service.id +- env: E2E +- skipDeployment: "false" +CDpmuimapper-service-E2E.NA-Prod: +- name: CD_pmuimapper-service E2E +- tag: pmuimapper-service +- mzId: CD_pmuimapper-service/management-zone/CDpmuimapper-service.id +- env: E2E +- skipDeployment: "false" +CDpmuimapper-service-E2E.CN-Prod: +- name: CD_pmuimapper-service E2E +- tag: pmuimapper-service +- mzId: CD_pmuimapper-service/management-zone/CDpmuimapper-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDpmuimapper-service-INT: +- name: CD_pmuimapper-service INT +- tag: pmuimapper-service +- mzId: CD_pmuimapper-service/management-zone/CDpmuimapper-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDpmuimapper-service-INT.EMEA-PreProd: +- name: CD_pmuimapper-service INT +- tag: pmuimapper-service +- mzId: CD_pmuimapper-service/management-zone/CDpmuimapper-service.id +- env: INT +- skipDeployment: "false" +CDpmuimapper-service-INT.NA-PreProd: +- name: CD_pmuimapper-service INT +- tag: pmuimapper-service +- mzId: CD_pmuimapper-service/management-zone/CDpmuimapper-service.id +- env: INT +- skipDeployment: "false" +CDpmuimapper-service-INT.CN-PreProd: +- name: CD_pmuimapper-service INT +- tag: pmuimapper-service +- mzId: CD_pmuimapper-service/management-zone/CDpmuimapper-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pmuimapper-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_pmuimapper-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_pmuimapper-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pmuimapper-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_pmuimapper-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_pmuimapper-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pmuimapper-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_pmuimapper-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_pmuimapper-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pmuimapper-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_pmuimapper-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_pmuimapper-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pmuimapper-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_pmuimapper-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_pmuimapper-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pmuimapper-service/dashboard/README.md b/BMW-Dynatrace-config/CD_pmuimapper-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_pmuimapper-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pmuimapper-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_pmuimapper-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..9aad1c91 --- /dev/null +++ b/BMW-Dynatrace-config/CD_pmuimapper-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDpmuimapper-service-PROD-E2E: defaultPRODE2E.json +- CDpmuimapper-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDpmuimapper-service-PROD-E2E: +- name: CD_pmuimapper-service PROD +- mzName: CD_pmuimapper-service/management-zone/CDpmuimapper-service.name +- mzId: CD_pmuimapper-service/management-zone/CDpmuimapper-service.id +- skipDeployment: "true" +#Configuration +CDpmuimapper-service-PROD-E2E.EMEA-Prod: +- name: CD_pmuimapper-service PROD +- mzName: CD_pmuimapper-service/management-zone/CDpmuimapper-service.name +- mzId: CD_pmuimapper-service/management-zone/CDpmuimapper-service.id +- tag: pmuimapper-service +- skipDeployment: "false" +CDpmuimapper-service-PROD-E2E.NA-Prod: +- name: CD_pmuimapper-service PROD +- mzName: CD_pmuimapper-service/management-zone/CDpmuimapper-service.name +- mzId: CD_pmuimapper-service/management-zone/CDpmuimapper-service.id +- tag: pmuimapper-service +- skipDeployment: "false" +CDpmuimapper-service-PROD-E2E.CN-Prod: +- name: CD_pmuimapper-service PROD +- mzName: CD_pmuimapper-service/management-zone/CDpmuimapper-service.name +- mzId: CD_pmuimapper-service/management-zone/CDpmuimapper-service.id +- tag: pmuimapper-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDpmuimapper-service-INT-TEST: +- name: CD_pmuimapper-service INT-TEST +- mzName: CD_pmuimapper-service/management-zone/CDpmuimapper-service.name +- mzId: CD_pmuimapper-service/management-zone/CDpmuimapper-service.id +- tag: pmuimapper-service +- skipDeployment: "true" +#Configuration +CDpmuimapper-service-INT-TEST.EMEA-PreProd: +- name: CD_pmuimapper-service INT-TEST +- mzName: CD_pmuimapper-service/management-zone/CDpmuimapper-service.name +- mzId: CD_pmuimapper-service/management-zone/CDpmuimapper-service.id +- tag: pmuimapper-service +- skipDeployment: "false" +CDpmuimapper-service-INT-TEST.NA-PreProd: +- name: CD_pmuimapper-service INT-TEST +- mzName: CD_pmuimapper-service/management-zone/CDpmuimapper-service.name +- mzId: CD_pmuimapper-service/management-zone/CDpmuimapper-service.id +- env: INT +- skipDeployment: "false" +CDpmuimapper-service-INT-TEST.CN-PreProd: +- name: CD_pmuimapper-service INT-TEST +- mzName: CD_pmuimapper-service/management-zone/CDpmuimapper-service.name +- mzId: CD_pmuimapper-service/management-zone/CDpmuimapper-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pmuimapper-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_pmuimapper-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_pmuimapper-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pmuimapper-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_pmuimapper-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_pmuimapper-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pmuimapper-service/management-zone/README.md b/BMW-Dynatrace-config/CD_pmuimapper-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_pmuimapper-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_pmuimapper-service/management-zone/default.json b/BMW-Dynatrace-config/CD_pmuimapper-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_pmuimapper-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pmuimapper-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_pmuimapper-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..db122b8e --- /dev/null +++ b/BMW-Dynatrace-config/CD_pmuimapper-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDpmuimapper-service: default.json + +CDpmuimapper-service: +- name: CD_pmuimapper-service +- tag: pmuimapper-service diff --git a/BMW-Dynatrace-config/CD_pmuimapper-service/notification/README.md b/BMW-Dynatrace-config/CD_pmuimapper-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_pmuimapper-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pmuimapper-service/notification/email.json b/BMW-Dynatrace-config/CD_pmuimapper-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_pmuimapper-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pmuimapper-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_pmuimapper-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_pmuimapper-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pmuimapper-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_pmuimapper-service/notification/notification.yaml new file mode 100644 index 00000000..08074963 --- /dev/null +++ b/BMW-Dynatrace-config/CD_pmuimapper-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDpmuimapper-service-PROD: msTeams.json +- CDpmuimapper-service-E2E: msTeams.json +- CDpmuimapper-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDpmuimapper-service-PROD: +- name: CD_pmuimapper-service PROD +- alertingProfile: CD_pmuimapper-service/alerting-profile/CDpmuimapper-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDpmuimapper-service-PROD.EMEA-Prod: +- name: CD_pmuimapper-service PROD +- alertingProfile: CD_pmuimapper-service/alerting-profile/CDpmuimapper-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDpmuimapper-service-PROD.NA-Prod: +- name: CD_pmuimapper-service PROD +- alertingProfile: CD_pmuimapper-service/alerting-profile/CDpmuimapper-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDpmuimapper-service-PROD.CN-Prod: +- name: CD_pmuimapper-service PROD +- alertingProfile: CD_pmuimapper-service/alerting-profile/CDpmuimapper-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDpmuimapper-service-E2E: +- name: CD_pmuimapper-service E2E +- alertingProfile: CD_pmuimapper-service/alerting-profile/CDpmuimapper-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDpmuimapper-service-E2E.EMEA-Prod: +- name: CD_pmuimapper-service E2E +- alertingProfile: CD_pmuimapper-service/alerting-profile/CDpmuimapper-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDpmuimapper-service-E2E.NA-Prod: +- name: CD_pmuimapper-service E2E +- alertingProfile: CD_pmuimapper-service/alerting-profile/CDpmuimapper-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDpmuimapper-service-E2E.CN-Prod: +- name: CD_pmuimapper-service E2E +- alertingProfile: CD_pmuimapper-service/alerting-profile/CDpmuimapper-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDpmuimapper-service-INT: +- name: CD_pmuimapper-service INT +- alertingProfile: CD_pmuimapper-service/alerting-profile/CDpmuimapper-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDpmuimapper-service-INT.EMEA-PreProd: +- name: CD_pmuimapper-service INT +- alertingProfile: CD_pmuimapper-service/alerting-profile/CDpmuimapper-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDpmuimapper-service-INT.NA-PreProd: +- name: CD_pmuimapper-service INT +- alertingProfile: CD_pmuimapper-service/alerting-profile/CDpmuimapper-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDpmuimapper-service-INT.CN-PreProd: +- name: CD_pmuimapper-service INT +- alertingProfile: CD_pmuimapper-service/alerting-profile/CDpmuimapper-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pmuimapper-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_pmuimapper-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_pmuimapper-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pmuimapper-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_pmuimapper-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_pmuimapper-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pmuimapper-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_pmuimapper-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..95fdbc0c --- /dev/null +++ b/BMW-Dynatrace-config/CD_pmuimapper-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- pmuimapper-service: default.json + +pmuimapper-service: +- name: CD_pmuimapper-service - +- mzName: CD_pmuimapper-service/management-zone/CDpmuimapper-service.name +- mzId: CD_pmuimapper-service/management-zone/CDpmuimapper-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..d0ed5ef4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDprivate-charging-tariffs-composite-service-PROD: default.json +- CDprivate-charging-tariffs-composite-service-E2E: default.json +- CDprivate-charging-tariffs-composite-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDprivate-charging-tariffs-composite-service-PROD: +- name: CD_private-charging-tariffs-composite-service PROD +- tag: private-charging-tariffs-composite-service +- mzId: CD_private-charging-tariffs-composite-service/management-zone/CDprivate-charging-tariffs-composite-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDprivate-charging-tariffs-composite-service-PROD.EMEA-Prod: +- name: CD_private-charging-tariffs-composite-service PROD +- tag: private-charging-tariffs-composite-service +- mzId: CD_private-charging-tariffs-composite-service/management-zone/CDprivate-charging-tariffs-composite-service.id +- env: PROD +- skipDeployment: "false" +CDprivate-charging-tariffs-composite-service-PROD.NA-Prod: +- name: CD_private-charging-tariffs-composite-service PROD +- tag: private-charging-tariffs-composite-service +- mzId: CD_private-charging-tariffs-composite-service/management-zone/CDprivate-charging-tariffs-composite-service.id +- env: PROD +- skipDeployment: "false" +CDprivate-charging-tariffs-composite-service-PROD.CN-Prod: +- name: CD_private-charging-tariffs-composite-service PROD +- tag: private-charging-tariffs-composite-service +- mzId: CD_private-charging-tariffs-composite-service/management-zone/CDprivate-charging-tariffs-composite-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDprivate-charging-tariffs-composite-service-E2E: +- name: CD_private-charging-tariffs-composite-service E2E +- tag: private-charging-tariffs-composite-service +- mzId: CD_private-charging-tariffs-composite-service/management-zone/CDprivate-charging-tariffs-composite-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDprivate-charging-tariffs-composite-service-E2E.EMEA-Prod: +- name: CD_private-charging-tariffs-composite-service E2E +- tag: private-charging-tariffs-composite-service +- mzId: CD_private-charging-tariffs-composite-service/management-zone/CDprivate-charging-tariffs-composite-service.id +- env: E2E +- skipDeployment: "false" +CDprivate-charging-tariffs-composite-service-E2E.NA-Prod: +- name: CD_private-charging-tariffs-composite-service E2E +- tag: private-charging-tariffs-composite-service +- mzId: CD_private-charging-tariffs-composite-service/management-zone/CDprivate-charging-tariffs-composite-service.id +- env: E2E +- skipDeployment: "false" +CDprivate-charging-tariffs-composite-service-E2E.CN-Prod: +- name: CD_private-charging-tariffs-composite-service E2E +- tag: private-charging-tariffs-composite-service +- mzId: CD_private-charging-tariffs-composite-service/management-zone/CDprivate-charging-tariffs-composite-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDprivate-charging-tariffs-composite-service-INT: +- name: CD_private-charging-tariffs-composite-service INT +- tag: private-charging-tariffs-composite-service +- mzId: CD_private-charging-tariffs-composite-service/management-zone/CDprivate-charging-tariffs-composite-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDprivate-charging-tariffs-composite-service-INT.EMEA-PreProd: +- name: CD_private-charging-tariffs-composite-service INT +- tag: private-charging-tariffs-composite-service +- mzId: CD_private-charging-tariffs-composite-service/management-zone/CDprivate-charging-tariffs-composite-service.id +- env: INT +- skipDeployment: "false" +CDprivate-charging-tariffs-composite-service-INT.NA-PreProd: +- name: CD_private-charging-tariffs-composite-service INT +- tag: private-charging-tariffs-composite-service +- mzId: CD_private-charging-tariffs-composite-service/management-zone/CDprivate-charging-tariffs-composite-service.id +- env: INT +- skipDeployment: "false" +CDprivate-charging-tariffs-composite-service-INT.CN-PreProd: +- name: CD_private-charging-tariffs-composite-service INT +- tag: private-charging-tariffs-composite-service +- mzId: CD_private-charging-tariffs-composite-service/management-zone/CDprivate-charging-tariffs-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/dashboard/README.md b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..9689c0b5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDprivate-charging-tariffs-composite-service-PROD-E2E: defaultPRODE2E.json +- CDprivate-charging-tariffs-composite-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDprivate-charging-tariffs-composite-service-PROD-E2E: +- name: CD_private-charging-tariffs-composite-service PROD +- mzName: CD_private-charging-tariffs-composite-service/management-zone/CDprivate-charging-tariffs-composite-service.name +- mzId: CD_private-charging-tariffs-composite-service/management-zone/CDprivate-charging-tariffs-composite-service.id +- skipDeployment: "true" +#Configuration +CDprivate-charging-tariffs-composite-service-PROD-E2E.EMEA-Prod: +- name: CD_private-charging-tariffs-composite-service PROD +- mzName: CD_private-charging-tariffs-composite-service/management-zone/CDprivate-charging-tariffs-composite-service.name +- mzId: CD_private-charging-tariffs-composite-service/management-zone/CDprivate-charging-tariffs-composite-service.id +- tag: private-charging-tariffs-composite-service +- skipDeployment: "false" +CDprivate-charging-tariffs-composite-service-PROD-E2E.NA-Prod: +- name: CD_private-charging-tariffs-composite-service PROD +- mzName: CD_private-charging-tariffs-composite-service/management-zone/CDprivate-charging-tariffs-composite-service.name +- mzId: CD_private-charging-tariffs-composite-service/management-zone/CDprivate-charging-tariffs-composite-service.id +- tag: private-charging-tariffs-composite-service +- skipDeployment: "false" +CDprivate-charging-tariffs-composite-service-PROD-E2E.CN-Prod: +- name: CD_private-charging-tariffs-composite-service PROD +- mzName: CD_private-charging-tariffs-composite-service/management-zone/CDprivate-charging-tariffs-composite-service.name +- mzId: CD_private-charging-tariffs-composite-service/management-zone/CDprivate-charging-tariffs-composite-service.id +- tag: private-charging-tariffs-composite-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDprivate-charging-tariffs-composite-service-INT-TEST: +- name: CD_private-charging-tariffs-composite-service INT-TEST +- mzName: CD_private-charging-tariffs-composite-service/management-zone/CDprivate-charging-tariffs-composite-service.name +- mzId: CD_private-charging-tariffs-composite-service/management-zone/CDprivate-charging-tariffs-composite-service.id +- tag: private-charging-tariffs-composite-service +- skipDeployment: "true" +#Configuration +CDprivate-charging-tariffs-composite-service-INT-TEST.EMEA-PreProd: +- name: CD_private-charging-tariffs-composite-service INT-TEST +- mzName: CD_private-charging-tariffs-composite-service/management-zone/CDprivate-charging-tariffs-composite-service.name +- mzId: CD_private-charging-tariffs-composite-service/management-zone/CDprivate-charging-tariffs-composite-service.id +- tag: private-charging-tariffs-composite-service +- skipDeployment: "false" +CDprivate-charging-tariffs-composite-service-INT-TEST.NA-PreProd: +- name: CD_private-charging-tariffs-composite-service INT-TEST +- mzName: CD_private-charging-tariffs-composite-service/management-zone/CDprivate-charging-tariffs-composite-service.name +- mzId: CD_private-charging-tariffs-composite-service/management-zone/CDprivate-charging-tariffs-composite-service.id +- env: INT +- skipDeployment: "false" +CDprivate-charging-tariffs-composite-service-INT-TEST.CN-PreProd: +- name: CD_private-charging-tariffs-composite-service INT-TEST +- mzName: CD_private-charging-tariffs-composite-service/management-zone/CDprivate-charging-tariffs-composite-service.name +- mzId: CD_private-charging-tariffs-composite-service/management-zone/CDprivate-charging-tariffs-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/management-zone/README.md b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/management-zone/default.json b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..1cabe427 --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDprivate-charging-tariffs-composite-service: default.json + +CDprivate-charging-tariffs-composite-service: +- name: CD_private-charging-tariffs-composite-service +- tag: private-charging-tariffs-composite-service diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/notification/README.md b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/notification/email.json b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/notification/notification.yaml new file mode 100644 index 00000000..810e094d --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDprivate-charging-tariffs-composite-service-PROD: msTeams.json +- CDprivate-charging-tariffs-composite-service-E2E: msTeams.json +- CDprivate-charging-tariffs-composite-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDprivate-charging-tariffs-composite-service-PROD: +- name: CD_private-charging-tariffs-composite-service PROD +- alertingProfile: CD_private-charging-tariffs-composite-service/alerting-profile/CDprivate-charging-tariffs-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDprivate-charging-tariffs-composite-service-PROD.EMEA-Prod: +- name: CD_private-charging-tariffs-composite-service PROD +- alertingProfile: CD_private-charging-tariffs-composite-service/alerting-profile/CDprivate-charging-tariffs-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDprivate-charging-tariffs-composite-service-PROD.NA-Prod: +- name: CD_private-charging-tariffs-composite-service PROD +- alertingProfile: CD_private-charging-tariffs-composite-service/alerting-profile/CDprivate-charging-tariffs-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDprivate-charging-tariffs-composite-service-PROD.CN-Prod: +- name: CD_private-charging-tariffs-composite-service PROD +- alertingProfile: CD_private-charging-tariffs-composite-service/alerting-profile/CDprivate-charging-tariffs-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDprivate-charging-tariffs-composite-service-E2E: +- name: CD_private-charging-tariffs-composite-service E2E +- alertingProfile: CD_private-charging-tariffs-composite-service/alerting-profile/CDprivate-charging-tariffs-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDprivate-charging-tariffs-composite-service-E2E.EMEA-Prod: +- name: CD_private-charging-tariffs-composite-service E2E +- alertingProfile: CD_private-charging-tariffs-composite-service/alerting-profile/CDprivate-charging-tariffs-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDprivate-charging-tariffs-composite-service-E2E.NA-Prod: +- name: CD_private-charging-tariffs-composite-service E2E +- alertingProfile: CD_private-charging-tariffs-composite-service/alerting-profile/CDprivate-charging-tariffs-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDprivate-charging-tariffs-composite-service-E2E.CN-Prod: +- name: CD_private-charging-tariffs-composite-service E2E +- alertingProfile: CD_private-charging-tariffs-composite-service/alerting-profile/CDprivate-charging-tariffs-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDprivate-charging-tariffs-composite-service-INT: +- name: CD_private-charging-tariffs-composite-service INT +- alertingProfile: CD_private-charging-tariffs-composite-service/alerting-profile/CDprivate-charging-tariffs-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDprivate-charging-tariffs-composite-service-INT.EMEA-PreProd: +- name: CD_private-charging-tariffs-composite-service INT +- alertingProfile: CD_private-charging-tariffs-composite-service/alerting-profile/CDprivate-charging-tariffs-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDprivate-charging-tariffs-composite-service-INT.NA-PreProd: +- name: CD_private-charging-tariffs-composite-service INT +- alertingProfile: CD_private-charging-tariffs-composite-service/alerting-profile/CDprivate-charging-tariffs-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDprivate-charging-tariffs-composite-service-INT.CN-PreProd: +- name: CD_private-charging-tariffs-composite-service INT +- alertingProfile: CD_private-charging-tariffs-composite-service/alerting-profile/CDprivate-charging-tariffs-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..aa9673cc --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- private-charging-tariffs-composite-service: default.json + +private-charging-tariffs-composite-service: +- name: CD_private-charging-tariffs-composite-service - +- mzName: CD_private-charging-tariffs-composite-service/management-zone/CDprivate-charging-tariffs-composite-service.name +- mzId: CD_private-charging-tariffs-composite-service/management-zone/CDprivate-charging-tariffs-composite-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..3cb49237 --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDprivate-charging-tariffs-service-PROD: default.json +- CDprivate-charging-tariffs-service-E2E: default.json +- CDprivate-charging-tariffs-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDprivate-charging-tariffs-service-PROD: +- name: CD_private-charging-tariffs-service PROD +- tag: private-charging-tariffs-service +- mzId: CD_private-charging-tariffs-service/management-zone/CDprivate-charging-tariffs-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDprivate-charging-tariffs-service-PROD.EMEA-Prod: +- name: CD_private-charging-tariffs-service PROD +- tag: private-charging-tariffs-service +- mzId: CD_private-charging-tariffs-service/management-zone/CDprivate-charging-tariffs-service.id +- env: PROD +- skipDeployment: "false" +CDprivate-charging-tariffs-service-PROD.NA-Prod: +- name: CD_private-charging-tariffs-service PROD +- tag: private-charging-tariffs-service +- mzId: CD_private-charging-tariffs-service/management-zone/CDprivate-charging-tariffs-service.id +- env: PROD +- skipDeployment: "false" +CDprivate-charging-tariffs-service-PROD.CN-Prod: +- name: CD_private-charging-tariffs-service PROD +- tag: private-charging-tariffs-service +- mzId: CD_private-charging-tariffs-service/management-zone/CDprivate-charging-tariffs-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDprivate-charging-tariffs-service-E2E: +- name: CD_private-charging-tariffs-service E2E +- tag: private-charging-tariffs-service +- mzId: CD_private-charging-tariffs-service/management-zone/CDprivate-charging-tariffs-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDprivate-charging-tariffs-service-E2E.EMEA-Prod: +- name: CD_private-charging-tariffs-service E2E +- tag: private-charging-tariffs-service +- mzId: CD_private-charging-tariffs-service/management-zone/CDprivate-charging-tariffs-service.id +- env: E2E +- skipDeployment: "false" +CDprivate-charging-tariffs-service-E2E.NA-Prod: +- name: CD_private-charging-tariffs-service E2E +- tag: private-charging-tariffs-service +- mzId: CD_private-charging-tariffs-service/management-zone/CDprivate-charging-tariffs-service.id +- env: E2E +- skipDeployment: "false" +CDprivate-charging-tariffs-service-E2E.CN-Prod: +- name: CD_private-charging-tariffs-service E2E +- tag: private-charging-tariffs-service +- mzId: CD_private-charging-tariffs-service/management-zone/CDprivate-charging-tariffs-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDprivate-charging-tariffs-service-INT: +- name: CD_private-charging-tariffs-service INT +- tag: private-charging-tariffs-service +- mzId: CD_private-charging-tariffs-service/management-zone/CDprivate-charging-tariffs-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDprivate-charging-tariffs-service-INT.EMEA-PreProd: +- name: CD_private-charging-tariffs-service INT +- tag: private-charging-tariffs-service +- mzId: CD_private-charging-tariffs-service/management-zone/CDprivate-charging-tariffs-service.id +- env: INT +- skipDeployment: "false" +CDprivate-charging-tariffs-service-INT.NA-PreProd: +- name: CD_private-charging-tariffs-service INT +- tag: private-charging-tariffs-service +- mzId: CD_private-charging-tariffs-service/management-zone/CDprivate-charging-tariffs-service.id +- env: INT +- skipDeployment: "false" +CDprivate-charging-tariffs-service-INT.CN-PreProd: +- name: CD_private-charging-tariffs-service INT +- tag: private-charging-tariffs-service +- mzId: CD_private-charging-tariffs-service/management-zone/CDprivate-charging-tariffs-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-service/dashboard/README.md b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..1478822a --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDprivate-charging-tariffs-service-PROD-E2E: defaultPRODE2E.json +- CDprivate-charging-tariffs-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDprivate-charging-tariffs-service-PROD-E2E: +- name: CD_private-charging-tariffs-service PROD +- mzName: CD_private-charging-tariffs-service/management-zone/CDprivate-charging-tariffs-service.name +- mzId: CD_private-charging-tariffs-service/management-zone/CDprivate-charging-tariffs-service.id +- skipDeployment: "true" +#Configuration +CDprivate-charging-tariffs-service-PROD-E2E.EMEA-Prod: +- name: CD_private-charging-tariffs-service PROD +- mzName: CD_private-charging-tariffs-service/management-zone/CDprivate-charging-tariffs-service.name +- mzId: CD_private-charging-tariffs-service/management-zone/CDprivate-charging-tariffs-service.id +- tag: private-charging-tariffs-service +- skipDeployment: "false" +CDprivate-charging-tariffs-service-PROD-E2E.NA-Prod: +- name: CD_private-charging-tariffs-service PROD +- mzName: CD_private-charging-tariffs-service/management-zone/CDprivate-charging-tariffs-service.name +- mzId: CD_private-charging-tariffs-service/management-zone/CDprivate-charging-tariffs-service.id +- tag: private-charging-tariffs-service +- skipDeployment: "false" +CDprivate-charging-tariffs-service-PROD-E2E.CN-Prod: +- name: CD_private-charging-tariffs-service PROD +- mzName: CD_private-charging-tariffs-service/management-zone/CDprivate-charging-tariffs-service.name +- mzId: CD_private-charging-tariffs-service/management-zone/CDprivate-charging-tariffs-service.id +- tag: private-charging-tariffs-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDprivate-charging-tariffs-service-INT-TEST: +- name: CD_private-charging-tariffs-service INT-TEST +- mzName: CD_private-charging-tariffs-service/management-zone/CDprivate-charging-tariffs-service.name +- mzId: CD_private-charging-tariffs-service/management-zone/CDprivate-charging-tariffs-service.id +- tag: private-charging-tariffs-service +- skipDeployment: "true" +#Configuration +CDprivate-charging-tariffs-service-INT-TEST.EMEA-PreProd: +- name: CD_private-charging-tariffs-service INT-TEST +- mzName: CD_private-charging-tariffs-service/management-zone/CDprivate-charging-tariffs-service.name +- mzId: CD_private-charging-tariffs-service/management-zone/CDprivate-charging-tariffs-service.id +- tag: private-charging-tariffs-service +- skipDeployment: "false" +CDprivate-charging-tariffs-service-INT-TEST.NA-PreProd: +- name: CD_private-charging-tariffs-service INT-TEST +- mzName: CD_private-charging-tariffs-service/management-zone/CDprivate-charging-tariffs-service.name +- mzId: CD_private-charging-tariffs-service/management-zone/CDprivate-charging-tariffs-service.id +- env: INT +- skipDeployment: "false" +CDprivate-charging-tariffs-service-INT-TEST.CN-PreProd: +- name: CD_private-charging-tariffs-service INT-TEST +- mzName: CD_private-charging-tariffs-service/management-zone/CDprivate-charging-tariffs-service.name +- mzId: CD_private-charging-tariffs-service/management-zone/CDprivate-charging-tariffs-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-service/management-zone/README.md b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-service/management-zone/default.json b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..1798d21d --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDprivate-charging-tariffs-service: default.json + +CDprivate-charging-tariffs-service: +- name: CD_private-charging-tariffs-service +- tag: private-charging-tariffs-service diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-service/notification/README.md b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-service/notification/email.json b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/notification/notification.yaml new file mode 100644 index 00000000..3967e6d8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDprivate-charging-tariffs-service-PROD: msTeams.json +- CDprivate-charging-tariffs-service-E2E: msTeams.json +- CDprivate-charging-tariffs-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDprivate-charging-tariffs-service-PROD: +- name: CD_private-charging-tariffs-service PROD +- alertingProfile: CD_private-charging-tariffs-service/alerting-profile/CDprivate-charging-tariffs-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDprivate-charging-tariffs-service-PROD.EMEA-Prod: +- name: CD_private-charging-tariffs-service PROD +- alertingProfile: CD_private-charging-tariffs-service/alerting-profile/CDprivate-charging-tariffs-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDprivate-charging-tariffs-service-PROD.NA-Prod: +- name: CD_private-charging-tariffs-service PROD +- alertingProfile: CD_private-charging-tariffs-service/alerting-profile/CDprivate-charging-tariffs-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDprivate-charging-tariffs-service-PROD.CN-Prod: +- name: CD_private-charging-tariffs-service PROD +- alertingProfile: CD_private-charging-tariffs-service/alerting-profile/CDprivate-charging-tariffs-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDprivate-charging-tariffs-service-E2E: +- name: CD_private-charging-tariffs-service E2E +- alertingProfile: CD_private-charging-tariffs-service/alerting-profile/CDprivate-charging-tariffs-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDprivate-charging-tariffs-service-E2E.EMEA-Prod: +- name: CD_private-charging-tariffs-service E2E +- alertingProfile: CD_private-charging-tariffs-service/alerting-profile/CDprivate-charging-tariffs-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDprivate-charging-tariffs-service-E2E.NA-Prod: +- name: CD_private-charging-tariffs-service E2E +- alertingProfile: CD_private-charging-tariffs-service/alerting-profile/CDprivate-charging-tariffs-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDprivate-charging-tariffs-service-E2E.CN-Prod: +- name: CD_private-charging-tariffs-service E2E +- alertingProfile: CD_private-charging-tariffs-service/alerting-profile/CDprivate-charging-tariffs-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDprivate-charging-tariffs-service-INT: +- name: CD_private-charging-tariffs-service INT +- alertingProfile: CD_private-charging-tariffs-service/alerting-profile/CDprivate-charging-tariffs-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDprivate-charging-tariffs-service-INT.EMEA-PreProd: +- name: CD_private-charging-tariffs-service INT +- alertingProfile: CD_private-charging-tariffs-service/alerting-profile/CDprivate-charging-tariffs-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDprivate-charging-tariffs-service-INT.NA-PreProd: +- name: CD_private-charging-tariffs-service INT +- alertingProfile: CD_private-charging-tariffs-service/alerting-profile/CDprivate-charging-tariffs-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDprivate-charging-tariffs-service-INT.CN-PreProd: +- name: CD_private-charging-tariffs-service INT +- alertingProfile: CD_private-charging-tariffs-service/alerting-profile/CDprivate-charging-tariffs-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..6ca6be20 --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- private-charging-tariffs-service: default.json + +private-charging-tariffs-service: +- name: CD_private-charging-tariffs-service - +- mzName: CD_private-charging-tariffs-service/management-zone/CDprivate-charging-tariffs-service.name +- mzId: CD_private-charging-tariffs-service/management-zone/CDprivate-charging-tariffs-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_push-notification-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..e07f107a --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDpush-notification-service-PROD: default.json +- CDpush-notification-service-E2E: default.json +- CDpush-notification-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDpush-notification-service-PROD: +- name: CD_push-notification-service PROD +- tag: push-notification-service +- mzId: CD_push-notification-service/management-zone/CDpush-notification-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDpush-notification-service-PROD.EMEA-Prod: +- name: CD_push-notification-service PROD +- tag: push-notification-service +- mzId: CD_push-notification-service/management-zone/CDpush-notification-service.id +- env: PROD +- skipDeployment: "false" +CDpush-notification-service-PROD.NA-Prod: +- name: CD_push-notification-service PROD +- tag: push-notification-service +- mzId: CD_push-notification-service/management-zone/CDpush-notification-service.id +- env: PROD +- skipDeployment: "false" +CDpush-notification-service-PROD.CN-Prod: +- name: CD_push-notification-service PROD +- tag: push-notification-service +- mzId: CD_push-notification-service/management-zone/CDpush-notification-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDpush-notification-service-E2E: +- name: CD_push-notification-service E2E +- tag: push-notification-service +- mzId: CD_push-notification-service/management-zone/CDpush-notification-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDpush-notification-service-E2E.EMEA-Prod: +- name: CD_push-notification-service E2E +- tag: push-notification-service +- mzId: CD_push-notification-service/management-zone/CDpush-notification-service.id +- env: E2E +- skipDeployment: "false" +CDpush-notification-service-E2E.NA-Prod: +- name: CD_push-notification-service E2E +- tag: push-notification-service +- mzId: CD_push-notification-service/management-zone/CDpush-notification-service.id +- env: E2E +- skipDeployment: "false" +CDpush-notification-service-E2E.CN-Prod: +- name: CD_push-notification-service E2E +- tag: push-notification-service +- mzId: CD_push-notification-service/management-zone/CDpush-notification-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDpush-notification-service-INT: +- name: CD_push-notification-service INT +- tag: push-notification-service +- mzId: CD_push-notification-service/management-zone/CDpush-notification-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDpush-notification-service-INT.EMEA-PreProd: +- name: CD_push-notification-service INT +- tag: push-notification-service +- mzId: CD_push-notification-service/management-zone/CDpush-notification-service.id +- env: INT +- skipDeployment: "false" +CDpush-notification-service-INT.NA-PreProd: +- name: CD_push-notification-service INT +- tag: push-notification-service +- mzId: CD_push-notification-service/management-zone/CDpush-notification-service.id +- env: INT +- skipDeployment: "false" +CDpush-notification-service-INT.CN-PreProd: +- name: CD_push-notification-service INT +- tag: push-notification-service +- mzId: CD_push-notification-service/management-zone/CDpush-notification-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_push-notification-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_push-notification-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_push-notification-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_push-notification-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_push-notification-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-service/dashboard/README.md b/BMW-Dynatrace-config/CD_push-notification-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_push-notification-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..26108794 --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDpush-notification-service-PROD-E2E: defaultPRODE2E.json +- CDpush-notification-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDpush-notification-service-PROD-E2E: +- name: CD_push-notification-service PROD +- mzName: CD_push-notification-service/management-zone/CDpush-notification-service.name +- mzId: CD_push-notification-service/management-zone/CDpush-notification-service.id +- skipDeployment: "true" +#Configuration +CDpush-notification-service-PROD-E2E.EMEA-Prod: +- name: CD_push-notification-service PROD +- mzName: CD_push-notification-service/management-zone/CDpush-notification-service.name +- mzId: CD_push-notification-service/management-zone/CDpush-notification-service.id +- tag: push-notification-service +- skipDeployment: "false" +CDpush-notification-service-PROD-E2E.NA-Prod: +- name: CD_push-notification-service PROD +- mzName: CD_push-notification-service/management-zone/CDpush-notification-service.name +- mzId: CD_push-notification-service/management-zone/CDpush-notification-service.id +- tag: push-notification-service +- skipDeployment: "false" +CDpush-notification-service-PROD-E2E.CN-Prod: +- name: CD_push-notification-service PROD +- mzName: CD_push-notification-service/management-zone/CDpush-notification-service.name +- mzId: CD_push-notification-service/management-zone/CDpush-notification-service.id +- tag: push-notification-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDpush-notification-service-INT-TEST: +- name: CD_push-notification-service INT-TEST +- mzName: CD_push-notification-service/management-zone/CDpush-notification-service.name +- mzId: CD_push-notification-service/management-zone/CDpush-notification-service.id +- tag: push-notification-service +- skipDeployment: "true" +#Configuration +CDpush-notification-service-INT-TEST.EMEA-PreProd: +- name: CD_push-notification-service INT-TEST +- mzName: CD_push-notification-service/management-zone/CDpush-notification-service.name +- mzId: CD_push-notification-service/management-zone/CDpush-notification-service.id +- tag: push-notification-service +- skipDeployment: "false" +CDpush-notification-service-INT-TEST.NA-PreProd: +- name: CD_push-notification-service INT-TEST +- mzName: CD_push-notification-service/management-zone/CDpush-notification-service.name +- mzId: CD_push-notification-service/management-zone/CDpush-notification-service.id +- env: INT +- skipDeployment: "false" +CDpush-notification-service-INT-TEST.CN-PreProd: +- name: CD_push-notification-service INT-TEST +- mzName: CD_push-notification-service/management-zone/CDpush-notification-service.name +- mzId: CD_push-notification-service/management-zone/CDpush-notification-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_push-notification-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_push-notification-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-service/management-zone/README.md b/BMW-Dynatrace-config/CD_push-notification-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_push-notification-service/management-zone/default.json b/BMW-Dynatrace-config/CD_push-notification-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_push-notification-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..adb05620 --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDpush-notification-service: default.json + +CDpush-notification-service: +- name: CD_push-notification-service +- tag: push-notification-service diff --git a/BMW-Dynatrace-config/CD_push-notification-service/notification/README.md b/BMW-Dynatrace-config/CD_push-notification-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-service/notification/email.json b/BMW-Dynatrace-config/CD_push-notification-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_push-notification-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_push-notification-service/notification/notification.yaml new file mode 100644 index 00000000..82c76091 --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDpush-notification-service-PROD: msTeams.json +- CDpush-notification-service-E2E: msTeams.json +- CDpush-notification-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDpush-notification-service-PROD: +- name: CD_push-notification-service PROD +- alertingProfile: CD_push-notification-service/alerting-profile/CDpush-notification-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDpush-notification-service-PROD.EMEA-Prod: +- name: CD_push-notification-service PROD +- alertingProfile: CD_push-notification-service/alerting-profile/CDpush-notification-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDpush-notification-service-PROD.NA-Prod: +- name: CD_push-notification-service PROD +- alertingProfile: CD_push-notification-service/alerting-profile/CDpush-notification-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDpush-notification-service-PROD.CN-Prod: +- name: CD_push-notification-service PROD +- alertingProfile: CD_push-notification-service/alerting-profile/CDpush-notification-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDpush-notification-service-E2E: +- name: CD_push-notification-service E2E +- alertingProfile: CD_push-notification-service/alerting-profile/CDpush-notification-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDpush-notification-service-E2E.EMEA-Prod: +- name: CD_push-notification-service E2E +- alertingProfile: CD_push-notification-service/alerting-profile/CDpush-notification-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDpush-notification-service-E2E.NA-Prod: +- name: CD_push-notification-service E2E +- alertingProfile: CD_push-notification-service/alerting-profile/CDpush-notification-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDpush-notification-service-E2E.CN-Prod: +- name: CD_push-notification-service E2E +- alertingProfile: CD_push-notification-service/alerting-profile/CDpush-notification-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDpush-notification-service-INT: +- name: CD_push-notification-service INT +- alertingProfile: CD_push-notification-service/alerting-profile/CDpush-notification-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDpush-notification-service-INT.EMEA-PreProd: +- name: CD_push-notification-service INT +- alertingProfile: CD_push-notification-service/alerting-profile/CDpush-notification-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDpush-notification-service-INT.NA-PreProd: +- name: CD_push-notification-service INT +- alertingProfile: CD_push-notification-service/alerting-profile/CDpush-notification-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDpush-notification-service-INT.CN-PreProd: +- name: CD_push-notification-service INT +- alertingProfile: CD_push-notification-service/alerting-profile/CDpush-notification-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_push-notification-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_push-notification-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_push-notification-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..4e89fe5d --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- push-notification-service: default.json + +push-notification-service: +- name: CD_push-notification-service - +- mzName: CD_push-notification-service/management-zone/CDpush-notification-service.name +- mzId: CD_push-notification-service/management-zone/CDpush-notification-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..390016d4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDpush-notification-settings-composite-service-PROD: default.json +- CDpush-notification-settings-composite-service-E2E: default.json +- CDpush-notification-settings-composite-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDpush-notification-settings-composite-service-PROD: +- name: CD_push-notification-settings-composite-service PROD +- tag: push-notification-settings-composite-service +- mzId: CD_push-notification-settings-composite-service/management-zone/CDpush-notification-settings-composite-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDpush-notification-settings-composite-service-PROD.EMEA-Prod: +- name: CD_push-notification-settings-composite-service PROD +- tag: push-notification-settings-composite-service +- mzId: CD_push-notification-settings-composite-service/management-zone/CDpush-notification-settings-composite-service.id +- env: PROD +- skipDeployment: "false" +CDpush-notification-settings-composite-service-PROD.NA-Prod: +- name: CD_push-notification-settings-composite-service PROD +- tag: push-notification-settings-composite-service +- mzId: CD_push-notification-settings-composite-service/management-zone/CDpush-notification-settings-composite-service.id +- env: PROD +- skipDeployment: "false" +CDpush-notification-settings-composite-service-PROD.CN-Prod: +- name: CD_push-notification-settings-composite-service PROD +- tag: push-notification-settings-composite-service +- mzId: CD_push-notification-settings-composite-service/management-zone/CDpush-notification-settings-composite-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDpush-notification-settings-composite-service-E2E: +- name: CD_push-notification-settings-composite-service E2E +- tag: push-notification-settings-composite-service +- mzId: CD_push-notification-settings-composite-service/management-zone/CDpush-notification-settings-composite-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDpush-notification-settings-composite-service-E2E.EMEA-Prod: +- name: CD_push-notification-settings-composite-service E2E +- tag: push-notification-settings-composite-service +- mzId: CD_push-notification-settings-composite-service/management-zone/CDpush-notification-settings-composite-service.id +- env: E2E +- skipDeployment: "false" +CDpush-notification-settings-composite-service-E2E.NA-Prod: +- name: CD_push-notification-settings-composite-service E2E +- tag: push-notification-settings-composite-service +- mzId: CD_push-notification-settings-composite-service/management-zone/CDpush-notification-settings-composite-service.id +- env: E2E +- skipDeployment: "false" +CDpush-notification-settings-composite-service-E2E.CN-Prod: +- name: CD_push-notification-settings-composite-service E2E +- tag: push-notification-settings-composite-service +- mzId: CD_push-notification-settings-composite-service/management-zone/CDpush-notification-settings-composite-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDpush-notification-settings-composite-service-INT: +- name: CD_push-notification-settings-composite-service INT +- tag: push-notification-settings-composite-service +- mzId: CD_push-notification-settings-composite-service/management-zone/CDpush-notification-settings-composite-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDpush-notification-settings-composite-service-INT.EMEA-PreProd: +- name: CD_push-notification-settings-composite-service INT +- tag: push-notification-settings-composite-service +- mzId: CD_push-notification-settings-composite-service/management-zone/CDpush-notification-settings-composite-service.id +- env: INT +- skipDeployment: "false" +CDpush-notification-settings-composite-service-INT.NA-PreProd: +- name: CD_push-notification-settings-composite-service INT +- tag: push-notification-settings-composite-service +- mzId: CD_push-notification-settings-composite-service/management-zone/CDpush-notification-settings-composite-service.id +- env: INT +- skipDeployment: "false" +CDpush-notification-settings-composite-service-INT.CN-PreProd: +- name: CD_push-notification-settings-composite-service INT +- tag: push-notification-settings-composite-service +- mzId: CD_push-notification-settings-composite-service/management-zone/CDpush-notification-settings-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/dashboard/README.md b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..64f1c7be --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDpush-notification-settings-composite-service-PROD-E2E: defaultPRODE2E.json +- CDpush-notification-settings-composite-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDpush-notification-settings-composite-service-PROD-E2E: +- name: CD_push-notification-settings-composite-service PROD +- mzName: CD_push-notification-settings-composite-service/management-zone/CDpush-notification-settings-composite-service.name +- mzId: CD_push-notification-settings-composite-service/management-zone/CDpush-notification-settings-composite-service.id +- skipDeployment: "true" +#Configuration +CDpush-notification-settings-composite-service-PROD-E2E.EMEA-Prod: +- name: CD_push-notification-settings-composite-service PROD +- mzName: CD_push-notification-settings-composite-service/management-zone/CDpush-notification-settings-composite-service.name +- mzId: CD_push-notification-settings-composite-service/management-zone/CDpush-notification-settings-composite-service.id +- tag: push-notification-settings-composite-service +- skipDeployment: "false" +CDpush-notification-settings-composite-service-PROD-E2E.NA-Prod: +- name: CD_push-notification-settings-composite-service PROD +- mzName: CD_push-notification-settings-composite-service/management-zone/CDpush-notification-settings-composite-service.name +- mzId: CD_push-notification-settings-composite-service/management-zone/CDpush-notification-settings-composite-service.id +- tag: push-notification-settings-composite-service +- skipDeployment: "false" +CDpush-notification-settings-composite-service-PROD-E2E.CN-Prod: +- name: CD_push-notification-settings-composite-service PROD +- mzName: CD_push-notification-settings-composite-service/management-zone/CDpush-notification-settings-composite-service.name +- mzId: CD_push-notification-settings-composite-service/management-zone/CDpush-notification-settings-composite-service.id +- tag: push-notification-settings-composite-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDpush-notification-settings-composite-service-INT-TEST: +- name: CD_push-notification-settings-composite-service INT-TEST +- mzName: CD_push-notification-settings-composite-service/management-zone/CDpush-notification-settings-composite-service.name +- mzId: CD_push-notification-settings-composite-service/management-zone/CDpush-notification-settings-composite-service.id +- tag: push-notification-settings-composite-service +- skipDeployment: "true" +#Configuration +CDpush-notification-settings-composite-service-INT-TEST.EMEA-PreProd: +- name: CD_push-notification-settings-composite-service INT-TEST +- mzName: CD_push-notification-settings-composite-service/management-zone/CDpush-notification-settings-composite-service.name +- mzId: CD_push-notification-settings-composite-service/management-zone/CDpush-notification-settings-composite-service.id +- tag: push-notification-settings-composite-service +- skipDeployment: "false" +CDpush-notification-settings-composite-service-INT-TEST.NA-PreProd: +- name: CD_push-notification-settings-composite-service INT-TEST +- mzName: CD_push-notification-settings-composite-service/management-zone/CDpush-notification-settings-composite-service.name +- mzId: CD_push-notification-settings-composite-service/management-zone/CDpush-notification-settings-composite-service.id +- env: INT +- skipDeployment: "false" +CDpush-notification-settings-composite-service-INT-TEST.CN-PreProd: +- name: CD_push-notification-settings-composite-service INT-TEST +- mzName: CD_push-notification-settings-composite-service/management-zone/CDpush-notification-settings-composite-service.name +- mzId: CD_push-notification-settings-composite-service/management-zone/CDpush-notification-settings-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/management-zone/README.md b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/management-zone/default.json b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..ae22e840 --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDpush-notification-settings-composite-service: default.json + +CDpush-notification-settings-composite-service: +- name: CD_push-notification-settings-composite-service +- tag: push-notification-settings-composite-service diff --git a/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/notification/README.md b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/notification/email.json b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/notification/notification.yaml new file mode 100644 index 00000000..4c9dac32 --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDpush-notification-settings-composite-service-PROD: msTeams.json +- CDpush-notification-settings-composite-service-E2E: msTeams.json +- CDpush-notification-settings-composite-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDpush-notification-settings-composite-service-PROD: +- name: CD_push-notification-settings-composite-service PROD +- alertingProfile: CD_push-notification-settings-composite-service/alerting-profile/CDpush-notification-settings-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDpush-notification-settings-composite-service-PROD.EMEA-Prod: +- name: CD_push-notification-settings-composite-service PROD +- alertingProfile: CD_push-notification-settings-composite-service/alerting-profile/CDpush-notification-settings-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDpush-notification-settings-composite-service-PROD.NA-Prod: +- name: CD_push-notification-settings-composite-service PROD +- alertingProfile: CD_push-notification-settings-composite-service/alerting-profile/CDpush-notification-settings-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDpush-notification-settings-composite-service-PROD.CN-Prod: +- name: CD_push-notification-settings-composite-service PROD +- alertingProfile: CD_push-notification-settings-composite-service/alerting-profile/CDpush-notification-settings-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDpush-notification-settings-composite-service-E2E: +- name: CD_push-notification-settings-composite-service E2E +- alertingProfile: CD_push-notification-settings-composite-service/alerting-profile/CDpush-notification-settings-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDpush-notification-settings-composite-service-E2E.EMEA-Prod: +- name: CD_push-notification-settings-composite-service E2E +- alertingProfile: CD_push-notification-settings-composite-service/alerting-profile/CDpush-notification-settings-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDpush-notification-settings-composite-service-E2E.NA-Prod: +- name: CD_push-notification-settings-composite-service E2E +- alertingProfile: CD_push-notification-settings-composite-service/alerting-profile/CDpush-notification-settings-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDpush-notification-settings-composite-service-E2E.CN-Prod: +- name: CD_push-notification-settings-composite-service E2E +- alertingProfile: CD_push-notification-settings-composite-service/alerting-profile/CDpush-notification-settings-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDpush-notification-settings-composite-service-INT: +- name: CD_push-notification-settings-composite-service INT +- alertingProfile: CD_push-notification-settings-composite-service/alerting-profile/CDpush-notification-settings-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDpush-notification-settings-composite-service-INT.EMEA-PreProd: +- name: CD_push-notification-settings-composite-service INT +- alertingProfile: CD_push-notification-settings-composite-service/alerting-profile/CDpush-notification-settings-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDpush-notification-settings-composite-service-INT.NA-PreProd: +- name: CD_push-notification-settings-composite-service INT +- alertingProfile: CD_push-notification-settings-composite-service/alerting-profile/CDpush-notification-settings-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDpush-notification-settings-composite-service-INT.CN-PreProd: +- name: CD_push-notification-settings-composite-service INT +- alertingProfile: CD_push-notification-settings-composite-service/alerting-profile/CDpush-notification-settings-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..8c1136c9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- push-notification-settings-composite-service: default.json + +push-notification-settings-composite-service: +- name: CD_push-notification-settings-composite-service - +- mzName: CD_push-notification-settings-composite-service/management-zone/CDpush-notification-settings-composite-service.name +- mzId: CD_push-notification-settings-composite-service/management-zone/CDpush-notification-settings-composite-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-analytics-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_recall-analytics-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..6da35e5c --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-analytics-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDrecall-analytics-service-PROD: default.json +- CDrecall-analytics-service-E2E: default.json +- CDrecall-analytics-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDrecall-analytics-service-PROD: +- name: CD_recall-analytics-service PROD +- tag: recall-analytics-service +- mzId: CD_recall-analytics-service/management-zone/CDrecall-analytics-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDrecall-analytics-service-PROD.EMEA-Prod: +- name: CD_recall-analytics-service PROD +- tag: recall-analytics-service +- mzId: CD_recall-analytics-service/management-zone/CDrecall-analytics-service.id +- env: PROD +- skipDeployment: "false" +CDrecall-analytics-service-PROD.NA-Prod: +- name: CD_recall-analytics-service PROD +- tag: recall-analytics-service +- mzId: CD_recall-analytics-service/management-zone/CDrecall-analytics-service.id +- env: PROD +- skipDeployment: "false" +CDrecall-analytics-service-PROD.CN-Prod: +- name: CD_recall-analytics-service PROD +- tag: recall-analytics-service +- mzId: CD_recall-analytics-service/management-zone/CDrecall-analytics-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDrecall-analytics-service-E2E: +- name: CD_recall-analytics-service E2E +- tag: recall-analytics-service +- mzId: CD_recall-analytics-service/management-zone/CDrecall-analytics-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDrecall-analytics-service-E2E.EMEA-Prod: +- name: CD_recall-analytics-service E2E +- tag: recall-analytics-service +- mzId: CD_recall-analytics-service/management-zone/CDrecall-analytics-service.id +- env: E2E +- skipDeployment: "false" +CDrecall-analytics-service-E2E.NA-Prod: +- name: CD_recall-analytics-service E2E +- tag: recall-analytics-service +- mzId: CD_recall-analytics-service/management-zone/CDrecall-analytics-service.id +- env: E2E +- skipDeployment: "false" +CDrecall-analytics-service-E2E.CN-Prod: +- name: CD_recall-analytics-service E2E +- tag: recall-analytics-service +- mzId: CD_recall-analytics-service/management-zone/CDrecall-analytics-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDrecall-analytics-service-INT: +- name: CD_recall-analytics-service INT +- tag: recall-analytics-service +- mzId: CD_recall-analytics-service/management-zone/CDrecall-analytics-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDrecall-analytics-service-INT.EMEA-PreProd: +- name: CD_recall-analytics-service INT +- tag: recall-analytics-service +- mzId: CD_recall-analytics-service/management-zone/CDrecall-analytics-service.id +- env: INT +- skipDeployment: "false" +CDrecall-analytics-service-INT.NA-PreProd: +- name: CD_recall-analytics-service INT +- tag: recall-analytics-service +- mzId: CD_recall-analytics-service/management-zone/CDrecall-analytics-service.id +- env: INT +- skipDeployment: "false" +CDrecall-analytics-service-INT.CN-PreProd: +- name: CD_recall-analytics-service INT +- tag: recall-analytics-service +- mzId: CD_recall-analytics-service/management-zone/CDrecall-analytics-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-analytics-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_recall-analytics-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-analytics-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-analytics-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_recall-analytics-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-analytics-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-analytics-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_recall-analytics-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-analytics-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-analytics-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_recall-analytics-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-analytics-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-analytics-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_recall-analytics-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-analytics-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-analytics-service/dashboard/README.md b/BMW-Dynatrace-config/CD_recall-analytics-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-analytics-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-analytics-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_recall-analytics-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..e3181817 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-analytics-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDrecall-analytics-service-PROD-E2E: defaultPRODE2E.json +- CDrecall-analytics-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDrecall-analytics-service-PROD-E2E: +- name: CD_recall-analytics-service PROD +- mzName: CD_recall-analytics-service/management-zone/CDrecall-analytics-service.name +- mzId: CD_recall-analytics-service/management-zone/CDrecall-analytics-service.id +- skipDeployment: "true" +#Configuration +CDrecall-analytics-service-PROD-E2E.EMEA-Prod: +- name: CD_recall-analytics-service PROD +- mzName: CD_recall-analytics-service/management-zone/CDrecall-analytics-service.name +- mzId: CD_recall-analytics-service/management-zone/CDrecall-analytics-service.id +- tag: recall-analytics-service +- skipDeployment: "false" +CDrecall-analytics-service-PROD-E2E.NA-Prod: +- name: CD_recall-analytics-service PROD +- mzName: CD_recall-analytics-service/management-zone/CDrecall-analytics-service.name +- mzId: CD_recall-analytics-service/management-zone/CDrecall-analytics-service.id +- tag: recall-analytics-service +- skipDeployment: "false" +CDrecall-analytics-service-PROD-E2E.CN-Prod: +- name: CD_recall-analytics-service PROD +- mzName: CD_recall-analytics-service/management-zone/CDrecall-analytics-service.name +- mzId: CD_recall-analytics-service/management-zone/CDrecall-analytics-service.id +- tag: recall-analytics-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDrecall-analytics-service-INT-TEST: +- name: CD_recall-analytics-service INT-TEST +- mzName: CD_recall-analytics-service/management-zone/CDrecall-analytics-service.name +- mzId: CD_recall-analytics-service/management-zone/CDrecall-analytics-service.id +- tag: recall-analytics-service +- skipDeployment: "true" +#Configuration +CDrecall-analytics-service-INT-TEST.EMEA-PreProd: +- name: CD_recall-analytics-service INT-TEST +- mzName: CD_recall-analytics-service/management-zone/CDrecall-analytics-service.name +- mzId: CD_recall-analytics-service/management-zone/CDrecall-analytics-service.id +- tag: recall-analytics-service +- skipDeployment: "false" +CDrecall-analytics-service-INT-TEST.NA-PreProd: +- name: CD_recall-analytics-service INT-TEST +- mzName: CD_recall-analytics-service/management-zone/CDrecall-analytics-service.name +- mzId: CD_recall-analytics-service/management-zone/CDrecall-analytics-service.id +- env: INT +- skipDeployment: "false" +CDrecall-analytics-service-INT-TEST.CN-PreProd: +- name: CD_recall-analytics-service INT-TEST +- mzName: CD_recall-analytics-service/management-zone/CDrecall-analytics-service.name +- mzId: CD_recall-analytics-service/management-zone/CDrecall-analytics-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-analytics-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_recall-analytics-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-analytics-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-analytics-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_recall-analytics-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-analytics-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-analytics-service/management-zone/README.md b/BMW-Dynatrace-config/CD_recall-analytics-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-analytics-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_recall-analytics-service/management-zone/default.json b/BMW-Dynatrace-config/CD_recall-analytics-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-analytics-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-analytics-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_recall-analytics-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..e0b8da4f --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-analytics-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDrecall-analytics-service: default.json + +CDrecall-analytics-service: +- name: CD_recall-analytics-service +- tag: recall-analytics-service diff --git a/BMW-Dynatrace-config/CD_recall-analytics-service/notification/README.md b/BMW-Dynatrace-config/CD_recall-analytics-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-analytics-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-analytics-service/notification/email.json b/BMW-Dynatrace-config/CD_recall-analytics-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-analytics-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-analytics-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_recall-analytics-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-analytics-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-analytics-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_recall-analytics-service/notification/notification.yaml new file mode 100644 index 00000000..130bc6a0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-analytics-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDrecall-analytics-service-PROD: msTeams.json +- CDrecall-analytics-service-E2E: msTeams.json +- CDrecall-analytics-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDrecall-analytics-service-PROD: +- name: CD_recall-analytics-service PROD +- alertingProfile: CD_recall-analytics-service/alerting-profile/CDrecall-analytics-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDrecall-analytics-service-PROD.EMEA-Prod: +- name: CD_recall-analytics-service PROD +- alertingProfile: CD_recall-analytics-service/alerting-profile/CDrecall-analytics-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDrecall-analytics-service-PROD.NA-Prod: +- name: CD_recall-analytics-service PROD +- alertingProfile: CD_recall-analytics-service/alerting-profile/CDrecall-analytics-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDrecall-analytics-service-PROD.CN-Prod: +- name: CD_recall-analytics-service PROD +- alertingProfile: CD_recall-analytics-service/alerting-profile/CDrecall-analytics-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDrecall-analytics-service-E2E: +- name: CD_recall-analytics-service E2E +- alertingProfile: CD_recall-analytics-service/alerting-profile/CDrecall-analytics-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDrecall-analytics-service-E2E.EMEA-Prod: +- name: CD_recall-analytics-service E2E +- alertingProfile: CD_recall-analytics-service/alerting-profile/CDrecall-analytics-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDrecall-analytics-service-E2E.NA-Prod: +- name: CD_recall-analytics-service E2E +- alertingProfile: CD_recall-analytics-service/alerting-profile/CDrecall-analytics-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDrecall-analytics-service-E2E.CN-Prod: +- name: CD_recall-analytics-service E2E +- alertingProfile: CD_recall-analytics-service/alerting-profile/CDrecall-analytics-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDrecall-analytics-service-INT: +- name: CD_recall-analytics-service INT +- alertingProfile: CD_recall-analytics-service/alerting-profile/CDrecall-analytics-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDrecall-analytics-service-INT.EMEA-PreProd: +- name: CD_recall-analytics-service INT +- alertingProfile: CD_recall-analytics-service/alerting-profile/CDrecall-analytics-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDrecall-analytics-service-INT.NA-PreProd: +- name: CD_recall-analytics-service INT +- alertingProfile: CD_recall-analytics-service/alerting-profile/CDrecall-analytics-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDrecall-analytics-service-INT.CN-PreProd: +- name: CD_recall-analytics-service INT +- alertingProfile: CD_recall-analytics-service/alerting-profile/CDrecall-analytics-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-analytics-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_recall-analytics-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-analytics-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-analytics-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_recall-analytics-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-analytics-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-analytics-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_recall-analytics-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..4d1aaf23 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-analytics-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- recall-analytics-service: default.json + +recall-analytics-service: +- name: CD_recall-analytics-service - +- mzName: CD_recall-analytics-service/management-zone/CDrecall-analytics-service.name +- mzId: CD_recall-analytics-service/management-zone/CDrecall-analytics-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-client-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_recall-client-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..5f66af62 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-client-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDrecall-client-service-PROD: default.json +- CDrecall-client-service-E2E: default.json +- CDrecall-client-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDrecall-client-service-PROD: +- name: CD_recall-client-service PROD +- tag: recall-client-service +- mzId: CD_recall-client-service/management-zone/CDrecall-client-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDrecall-client-service-PROD.EMEA-Prod: +- name: CD_recall-client-service PROD +- tag: recall-client-service +- mzId: CD_recall-client-service/management-zone/CDrecall-client-service.id +- env: PROD +- skipDeployment: "false" +CDrecall-client-service-PROD.NA-Prod: +- name: CD_recall-client-service PROD +- tag: recall-client-service +- mzId: CD_recall-client-service/management-zone/CDrecall-client-service.id +- env: PROD +- skipDeployment: "false" +CDrecall-client-service-PROD.CN-Prod: +- name: CD_recall-client-service PROD +- tag: recall-client-service +- mzId: CD_recall-client-service/management-zone/CDrecall-client-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDrecall-client-service-E2E: +- name: CD_recall-client-service E2E +- tag: recall-client-service +- mzId: CD_recall-client-service/management-zone/CDrecall-client-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDrecall-client-service-E2E.EMEA-Prod: +- name: CD_recall-client-service E2E +- tag: recall-client-service +- mzId: CD_recall-client-service/management-zone/CDrecall-client-service.id +- env: E2E +- skipDeployment: "false" +CDrecall-client-service-E2E.NA-Prod: +- name: CD_recall-client-service E2E +- tag: recall-client-service +- mzId: CD_recall-client-service/management-zone/CDrecall-client-service.id +- env: E2E +- skipDeployment: "false" +CDrecall-client-service-E2E.CN-Prod: +- name: CD_recall-client-service E2E +- tag: recall-client-service +- mzId: CD_recall-client-service/management-zone/CDrecall-client-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDrecall-client-service-INT: +- name: CD_recall-client-service INT +- tag: recall-client-service +- mzId: CD_recall-client-service/management-zone/CDrecall-client-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDrecall-client-service-INT.EMEA-PreProd: +- name: CD_recall-client-service INT +- tag: recall-client-service +- mzId: CD_recall-client-service/management-zone/CDrecall-client-service.id +- env: INT +- skipDeployment: "false" +CDrecall-client-service-INT.NA-PreProd: +- name: CD_recall-client-service INT +- tag: recall-client-service +- mzId: CD_recall-client-service/management-zone/CDrecall-client-service.id +- env: INT +- skipDeployment: "false" +CDrecall-client-service-INT.CN-PreProd: +- name: CD_recall-client-service INT +- tag: recall-client-service +- mzId: CD_recall-client-service/management-zone/CDrecall-client-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-client-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_recall-client-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-client-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-client-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_recall-client-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-client-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-client-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_recall-client-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-client-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-client-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_recall-client-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-client-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-client-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_recall-client-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-client-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-client-service/dashboard/README.md b/BMW-Dynatrace-config/CD_recall-client-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-client-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-client-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_recall-client-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..3dec73cf --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-client-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDrecall-client-service-PROD-E2E: defaultPRODE2E.json +- CDrecall-client-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDrecall-client-service-PROD-E2E: +- name: CD_recall-client-service PROD +- mzName: CD_recall-client-service/management-zone/CDrecall-client-service.name +- mzId: CD_recall-client-service/management-zone/CDrecall-client-service.id +- skipDeployment: "true" +#Configuration +CDrecall-client-service-PROD-E2E.EMEA-Prod: +- name: CD_recall-client-service PROD +- mzName: CD_recall-client-service/management-zone/CDrecall-client-service.name +- mzId: CD_recall-client-service/management-zone/CDrecall-client-service.id +- tag: recall-client-service +- skipDeployment: "false" +CDrecall-client-service-PROD-E2E.NA-Prod: +- name: CD_recall-client-service PROD +- mzName: CD_recall-client-service/management-zone/CDrecall-client-service.name +- mzId: CD_recall-client-service/management-zone/CDrecall-client-service.id +- tag: recall-client-service +- skipDeployment: "false" +CDrecall-client-service-PROD-E2E.CN-Prod: +- name: CD_recall-client-service PROD +- mzName: CD_recall-client-service/management-zone/CDrecall-client-service.name +- mzId: CD_recall-client-service/management-zone/CDrecall-client-service.id +- tag: recall-client-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDrecall-client-service-INT-TEST: +- name: CD_recall-client-service INT-TEST +- mzName: CD_recall-client-service/management-zone/CDrecall-client-service.name +- mzId: CD_recall-client-service/management-zone/CDrecall-client-service.id +- tag: recall-client-service +- skipDeployment: "true" +#Configuration +CDrecall-client-service-INT-TEST.EMEA-PreProd: +- name: CD_recall-client-service INT-TEST +- mzName: CD_recall-client-service/management-zone/CDrecall-client-service.name +- mzId: CD_recall-client-service/management-zone/CDrecall-client-service.id +- tag: recall-client-service +- skipDeployment: "false" +CDrecall-client-service-INT-TEST.NA-PreProd: +- name: CD_recall-client-service INT-TEST +- mzName: CD_recall-client-service/management-zone/CDrecall-client-service.name +- mzId: CD_recall-client-service/management-zone/CDrecall-client-service.id +- env: INT +- skipDeployment: "false" +CDrecall-client-service-INT-TEST.CN-PreProd: +- name: CD_recall-client-service INT-TEST +- mzName: CD_recall-client-service/management-zone/CDrecall-client-service.name +- mzId: CD_recall-client-service/management-zone/CDrecall-client-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-client-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_recall-client-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-client-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-client-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_recall-client-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-client-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-client-service/management-zone/README.md b/BMW-Dynatrace-config/CD_recall-client-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-client-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_recall-client-service/management-zone/default.json b/BMW-Dynatrace-config/CD_recall-client-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-client-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-client-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_recall-client-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..02baa096 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-client-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDrecall-client-service: default.json + +CDrecall-client-service: +- name: CD_recall-client-service +- tag: recall-client-service diff --git a/BMW-Dynatrace-config/CD_recall-client-service/notification/README.md b/BMW-Dynatrace-config/CD_recall-client-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-client-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-client-service/notification/email.json b/BMW-Dynatrace-config/CD_recall-client-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-client-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-client-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_recall-client-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-client-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-client-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_recall-client-service/notification/notification.yaml new file mode 100644 index 00000000..93206dbb --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-client-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDrecall-client-service-PROD: msTeams.json +- CDrecall-client-service-E2E: msTeams.json +- CDrecall-client-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDrecall-client-service-PROD: +- name: CD_recall-client-service PROD +- alertingProfile: CD_recall-client-service/alerting-profile/CDrecall-client-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDrecall-client-service-PROD.EMEA-Prod: +- name: CD_recall-client-service PROD +- alertingProfile: CD_recall-client-service/alerting-profile/CDrecall-client-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDrecall-client-service-PROD.NA-Prod: +- name: CD_recall-client-service PROD +- alertingProfile: CD_recall-client-service/alerting-profile/CDrecall-client-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDrecall-client-service-PROD.CN-Prod: +- name: CD_recall-client-service PROD +- alertingProfile: CD_recall-client-service/alerting-profile/CDrecall-client-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDrecall-client-service-E2E: +- name: CD_recall-client-service E2E +- alertingProfile: CD_recall-client-service/alerting-profile/CDrecall-client-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDrecall-client-service-E2E.EMEA-Prod: +- name: CD_recall-client-service E2E +- alertingProfile: CD_recall-client-service/alerting-profile/CDrecall-client-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDrecall-client-service-E2E.NA-Prod: +- name: CD_recall-client-service E2E +- alertingProfile: CD_recall-client-service/alerting-profile/CDrecall-client-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDrecall-client-service-E2E.CN-Prod: +- name: CD_recall-client-service E2E +- alertingProfile: CD_recall-client-service/alerting-profile/CDrecall-client-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDrecall-client-service-INT: +- name: CD_recall-client-service INT +- alertingProfile: CD_recall-client-service/alerting-profile/CDrecall-client-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDrecall-client-service-INT.EMEA-PreProd: +- name: CD_recall-client-service INT +- alertingProfile: CD_recall-client-service/alerting-profile/CDrecall-client-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDrecall-client-service-INT.NA-PreProd: +- name: CD_recall-client-service INT +- alertingProfile: CD_recall-client-service/alerting-profile/CDrecall-client-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDrecall-client-service-INT.CN-PreProd: +- name: CD_recall-client-service INT +- alertingProfile: CD_recall-client-service/alerting-profile/CDrecall-client-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-client-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_recall-client-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-client-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-client-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_recall-client-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-client-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-client-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_recall-client-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..9ad32d1b --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-client-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- recall-client-service: default.json + +recall-client-service: +- name: CD_recall-client-service - +- mzName: CD_recall-client-service/management-zone/CDrecall-client-service.name +- mzId: CD_recall-client-service/management-zone/CDrecall-client-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-handler-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_recall-handler-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..31528828 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-handler-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDrecall-handler-service-PROD: default.json +- CDrecall-handler-service-E2E: default.json +- CDrecall-handler-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDrecall-handler-service-PROD: +- name: CD_recall-handler-service PROD +- tag: recall-handler-service +- mzId: CD_recall-handler-service/management-zone/CDrecall-handler-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDrecall-handler-service-PROD.EMEA-Prod: +- name: CD_recall-handler-service PROD +- tag: recall-handler-service +- mzId: CD_recall-handler-service/management-zone/CDrecall-handler-service.id +- env: PROD +- skipDeployment: "false" +CDrecall-handler-service-PROD.NA-Prod: +- name: CD_recall-handler-service PROD +- tag: recall-handler-service +- mzId: CD_recall-handler-service/management-zone/CDrecall-handler-service.id +- env: PROD +- skipDeployment: "false" +CDrecall-handler-service-PROD.CN-Prod: +- name: CD_recall-handler-service PROD +- tag: recall-handler-service +- mzId: CD_recall-handler-service/management-zone/CDrecall-handler-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDrecall-handler-service-E2E: +- name: CD_recall-handler-service E2E +- tag: recall-handler-service +- mzId: CD_recall-handler-service/management-zone/CDrecall-handler-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDrecall-handler-service-E2E.EMEA-Prod: +- name: CD_recall-handler-service E2E +- tag: recall-handler-service +- mzId: CD_recall-handler-service/management-zone/CDrecall-handler-service.id +- env: E2E +- skipDeployment: "false" +CDrecall-handler-service-E2E.NA-Prod: +- name: CD_recall-handler-service E2E +- tag: recall-handler-service +- mzId: CD_recall-handler-service/management-zone/CDrecall-handler-service.id +- env: E2E +- skipDeployment: "false" +CDrecall-handler-service-E2E.CN-Prod: +- name: CD_recall-handler-service E2E +- tag: recall-handler-service +- mzId: CD_recall-handler-service/management-zone/CDrecall-handler-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDrecall-handler-service-INT: +- name: CD_recall-handler-service INT +- tag: recall-handler-service +- mzId: CD_recall-handler-service/management-zone/CDrecall-handler-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDrecall-handler-service-INT.EMEA-PreProd: +- name: CD_recall-handler-service INT +- tag: recall-handler-service +- mzId: CD_recall-handler-service/management-zone/CDrecall-handler-service.id +- env: INT +- skipDeployment: "false" +CDrecall-handler-service-INT.NA-PreProd: +- name: CD_recall-handler-service INT +- tag: recall-handler-service +- mzId: CD_recall-handler-service/management-zone/CDrecall-handler-service.id +- env: INT +- skipDeployment: "false" +CDrecall-handler-service-INT.CN-PreProd: +- name: CD_recall-handler-service INT +- tag: recall-handler-service +- mzId: CD_recall-handler-service/management-zone/CDrecall-handler-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-handler-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_recall-handler-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-handler-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-handler-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_recall-handler-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-handler-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-handler-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_recall-handler-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-handler-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-handler-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_recall-handler-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-handler-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-handler-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_recall-handler-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-handler-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-handler-service/dashboard/README.md b/BMW-Dynatrace-config/CD_recall-handler-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-handler-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-handler-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_recall-handler-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..17177bde --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-handler-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDrecall-handler-service-PROD-E2E: defaultPRODE2E.json +- CDrecall-handler-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDrecall-handler-service-PROD-E2E: +- name: CD_recall-handler-service PROD +- mzName: CD_recall-handler-service/management-zone/CDrecall-handler-service.name +- mzId: CD_recall-handler-service/management-zone/CDrecall-handler-service.id +- skipDeployment: "true" +#Configuration +CDrecall-handler-service-PROD-E2E.EMEA-Prod: +- name: CD_recall-handler-service PROD +- mzName: CD_recall-handler-service/management-zone/CDrecall-handler-service.name +- mzId: CD_recall-handler-service/management-zone/CDrecall-handler-service.id +- tag: recall-handler-service +- skipDeployment: "false" +CDrecall-handler-service-PROD-E2E.NA-Prod: +- name: CD_recall-handler-service PROD +- mzName: CD_recall-handler-service/management-zone/CDrecall-handler-service.name +- mzId: CD_recall-handler-service/management-zone/CDrecall-handler-service.id +- tag: recall-handler-service +- skipDeployment: "false" +CDrecall-handler-service-PROD-E2E.CN-Prod: +- name: CD_recall-handler-service PROD +- mzName: CD_recall-handler-service/management-zone/CDrecall-handler-service.name +- mzId: CD_recall-handler-service/management-zone/CDrecall-handler-service.id +- tag: recall-handler-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDrecall-handler-service-INT-TEST: +- name: CD_recall-handler-service INT-TEST +- mzName: CD_recall-handler-service/management-zone/CDrecall-handler-service.name +- mzId: CD_recall-handler-service/management-zone/CDrecall-handler-service.id +- tag: recall-handler-service +- skipDeployment: "true" +#Configuration +CDrecall-handler-service-INT-TEST.EMEA-PreProd: +- name: CD_recall-handler-service INT-TEST +- mzName: CD_recall-handler-service/management-zone/CDrecall-handler-service.name +- mzId: CD_recall-handler-service/management-zone/CDrecall-handler-service.id +- tag: recall-handler-service +- skipDeployment: "false" +CDrecall-handler-service-INT-TEST.NA-PreProd: +- name: CD_recall-handler-service INT-TEST +- mzName: CD_recall-handler-service/management-zone/CDrecall-handler-service.name +- mzId: CD_recall-handler-service/management-zone/CDrecall-handler-service.id +- env: INT +- skipDeployment: "false" +CDrecall-handler-service-INT-TEST.CN-PreProd: +- name: CD_recall-handler-service INT-TEST +- mzName: CD_recall-handler-service/management-zone/CDrecall-handler-service.name +- mzId: CD_recall-handler-service/management-zone/CDrecall-handler-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-handler-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_recall-handler-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-handler-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-handler-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_recall-handler-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-handler-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-handler-service/management-zone/README.md b/BMW-Dynatrace-config/CD_recall-handler-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-handler-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_recall-handler-service/management-zone/default.json b/BMW-Dynatrace-config/CD_recall-handler-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-handler-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-handler-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_recall-handler-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..5d2459b5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-handler-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDrecall-handler-service: default.json + +CDrecall-handler-service: +- name: CD_recall-handler-service +- tag: recall-handler-service diff --git a/BMW-Dynatrace-config/CD_recall-handler-service/notification/README.md b/BMW-Dynatrace-config/CD_recall-handler-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-handler-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-handler-service/notification/email.json b/BMW-Dynatrace-config/CD_recall-handler-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-handler-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-handler-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_recall-handler-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-handler-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-handler-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_recall-handler-service/notification/notification.yaml new file mode 100644 index 00000000..30dfab07 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-handler-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDrecall-handler-service-PROD: msTeams.json +- CDrecall-handler-service-E2E: msTeams.json +- CDrecall-handler-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDrecall-handler-service-PROD: +- name: CD_recall-handler-service PROD +- alertingProfile: CD_recall-handler-service/alerting-profile/CDrecall-handler-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDrecall-handler-service-PROD.EMEA-Prod: +- name: CD_recall-handler-service PROD +- alertingProfile: CD_recall-handler-service/alerting-profile/CDrecall-handler-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDrecall-handler-service-PROD.NA-Prod: +- name: CD_recall-handler-service PROD +- alertingProfile: CD_recall-handler-service/alerting-profile/CDrecall-handler-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDrecall-handler-service-PROD.CN-Prod: +- name: CD_recall-handler-service PROD +- alertingProfile: CD_recall-handler-service/alerting-profile/CDrecall-handler-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDrecall-handler-service-E2E: +- name: CD_recall-handler-service E2E +- alertingProfile: CD_recall-handler-service/alerting-profile/CDrecall-handler-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDrecall-handler-service-E2E.EMEA-Prod: +- name: CD_recall-handler-service E2E +- alertingProfile: CD_recall-handler-service/alerting-profile/CDrecall-handler-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDrecall-handler-service-E2E.NA-Prod: +- name: CD_recall-handler-service E2E +- alertingProfile: CD_recall-handler-service/alerting-profile/CDrecall-handler-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDrecall-handler-service-E2E.CN-Prod: +- name: CD_recall-handler-service E2E +- alertingProfile: CD_recall-handler-service/alerting-profile/CDrecall-handler-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDrecall-handler-service-INT: +- name: CD_recall-handler-service INT +- alertingProfile: CD_recall-handler-service/alerting-profile/CDrecall-handler-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDrecall-handler-service-INT.EMEA-PreProd: +- name: CD_recall-handler-service INT +- alertingProfile: CD_recall-handler-service/alerting-profile/CDrecall-handler-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDrecall-handler-service-INT.NA-PreProd: +- name: CD_recall-handler-service INT +- alertingProfile: CD_recall-handler-service/alerting-profile/CDrecall-handler-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDrecall-handler-service-INT.CN-PreProd: +- name: CD_recall-handler-service INT +- alertingProfile: CD_recall-handler-service/alerting-profile/CDrecall-handler-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-handler-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_recall-handler-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-handler-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-handler-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_recall-handler-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-handler-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-handler-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_recall-handler-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..5e323642 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-handler-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- recall-handler-service: default.json + +recall-handler-service: +- name: CD_recall-handler-service - +- mzName: CD_recall-handler-service/management-zone/CDrecall-handler-service.name +- mzId: CD_recall-handler-service/management-zone/CDrecall-handler-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-notification-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_recall-notification-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..0bc887e7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-notification-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDrecall-notification-service-PROD: default.json +- CDrecall-notification-service-E2E: default.json +- CDrecall-notification-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDrecall-notification-service-PROD: +- name: CD_recall-notification-service PROD +- tag: recall-notification-service +- mzId: CD_recall-notification-service/management-zone/CDrecall-notification-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDrecall-notification-service-PROD.EMEA-Prod: +- name: CD_recall-notification-service PROD +- tag: recall-notification-service +- mzId: CD_recall-notification-service/management-zone/CDrecall-notification-service.id +- env: PROD +- skipDeployment: "false" +CDrecall-notification-service-PROD.NA-Prod: +- name: CD_recall-notification-service PROD +- tag: recall-notification-service +- mzId: CD_recall-notification-service/management-zone/CDrecall-notification-service.id +- env: PROD +- skipDeployment: "false" +CDrecall-notification-service-PROD.CN-Prod: +- name: CD_recall-notification-service PROD +- tag: recall-notification-service +- mzId: CD_recall-notification-service/management-zone/CDrecall-notification-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDrecall-notification-service-E2E: +- name: CD_recall-notification-service E2E +- tag: recall-notification-service +- mzId: CD_recall-notification-service/management-zone/CDrecall-notification-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDrecall-notification-service-E2E.EMEA-Prod: +- name: CD_recall-notification-service E2E +- tag: recall-notification-service +- mzId: CD_recall-notification-service/management-zone/CDrecall-notification-service.id +- env: E2E +- skipDeployment: "false" +CDrecall-notification-service-E2E.NA-Prod: +- name: CD_recall-notification-service E2E +- tag: recall-notification-service +- mzId: CD_recall-notification-service/management-zone/CDrecall-notification-service.id +- env: E2E +- skipDeployment: "false" +CDrecall-notification-service-E2E.CN-Prod: +- name: CD_recall-notification-service E2E +- tag: recall-notification-service +- mzId: CD_recall-notification-service/management-zone/CDrecall-notification-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDrecall-notification-service-INT: +- name: CD_recall-notification-service INT +- tag: recall-notification-service +- mzId: CD_recall-notification-service/management-zone/CDrecall-notification-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDrecall-notification-service-INT.EMEA-PreProd: +- name: CD_recall-notification-service INT +- tag: recall-notification-service +- mzId: CD_recall-notification-service/management-zone/CDrecall-notification-service.id +- env: INT +- skipDeployment: "false" +CDrecall-notification-service-INT.NA-PreProd: +- name: CD_recall-notification-service INT +- tag: recall-notification-service +- mzId: CD_recall-notification-service/management-zone/CDrecall-notification-service.id +- env: INT +- skipDeployment: "false" +CDrecall-notification-service-INT.CN-PreProd: +- name: CD_recall-notification-service INT +- tag: recall-notification-service +- mzId: CD_recall-notification-service/management-zone/CDrecall-notification-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-notification-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_recall-notification-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-notification-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-notification-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_recall-notification-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-notification-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-notification-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_recall-notification-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-notification-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-notification-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_recall-notification-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-notification-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-notification-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_recall-notification-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-notification-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-notification-service/dashboard/README.md b/BMW-Dynatrace-config/CD_recall-notification-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-notification-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-notification-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_recall-notification-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..bc30ab7e --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-notification-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDrecall-notification-service-PROD-E2E: defaultPRODE2E.json +- CDrecall-notification-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDrecall-notification-service-PROD-E2E: +- name: CD_recall-notification-service PROD +- mzName: CD_recall-notification-service/management-zone/CDrecall-notification-service.name +- mzId: CD_recall-notification-service/management-zone/CDrecall-notification-service.id +- skipDeployment: "true" +#Configuration +CDrecall-notification-service-PROD-E2E.EMEA-Prod: +- name: CD_recall-notification-service PROD +- mzName: CD_recall-notification-service/management-zone/CDrecall-notification-service.name +- mzId: CD_recall-notification-service/management-zone/CDrecall-notification-service.id +- tag: recall-notification-service +- skipDeployment: "false" +CDrecall-notification-service-PROD-E2E.NA-Prod: +- name: CD_recall-notification-service PROD +- mzName: CD_recall-notification-service/management-zone/CDrecall-notification-service.name +- mzId: CD_recall-notification-service/management-zone/CDrecall-notification-service.id +- tag: recall-notification-service +- skipDeployment: "false" +CDrecall-notification-service-PROD-E2E.CN-Prod: +- name: CD_recall-notification-service PROD +- mzName: CD_recall-notification-service/management-zone/CDrecall-notification-service.name +- mzId: CD_recall-notification-service/management-zone/CDrecall-notification-service.id +- tag: recall-notification-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDrecall-notification-service-INT-TEST: +- name: CD_recall-notification-service INT-TEST +- mzName: CD_recall-notification-service/management-zone/CDrecall-notification-service.name +- mzId: CD_recall-notification-service/management-zone/CDrecall-notification-service.id +- tag: recall-notification-service +- skipDeployment: "true" +#Configuration +CDrecall-notification-service-INT-TEST.EMEA-PreProd: +- name: CD_recall-notification-service INT-TEST +- mzName: CD_recall-notification-service/management-zone/CDrecall-notification-service.name +- mzId: CD_recall-notification-service/management-zone/CDrecall-notification-service.id +- tag: recall-notification-service +- skipDeployment: "false" +CDrecall-notification-service-INT-TEST.NA-PreProd: +- name: CD_recall-notification-service INT-TEST +- mzName: CD_recall-notification-service/management-zone/CDrecall-notification-service.name +- mzId: CD_recall-notification-service/management-zone/CDrecall-notification-service.id +- env: INT +- skipDeployment: "false" +CDrecall-notification-service-INT-TEST.CN-PreProd: +- name: CD_recall-notification-service INT-TEST +- mzName: CD_recall-notification-service/management-zone/CDrecall-notification-service.name +- mzId: CD_recall-notification-service/management-zone/CDrecall-notification-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-notification-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_recall-notification-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-notification-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-notification-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_recall-notification-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-notification-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-notification-service/management-zone/README.md b/BMW-Dynatrace-config/CD_recall-notification-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-notification-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_recall-notification-service/management-zone/default.json b/BMW-Dynatrace-config/CD_recall-notification-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-notification-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-notification-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_recall-notification-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..b495c33a --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-notification-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDrecall-notification-service: default.json + +CDrecall-notification-service: +- name: CD_recall-notification-service +- tag: recall-notification-service diff --git a/BMW-Dynatrace-config/CD_recall-notification-service/notification/README.md b/BMW-Dynatrace-config/CD_recall-notification-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-notification-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-notification-service/notification/email.json b/BMW-Dynatrace-config/CD_recall-notification-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-notification-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-notification-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_recall-notification-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-notification-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-notification-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_recall-notification-service/notification/notification.yaml new file mode 100644 index 00000000..f2f4373c --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-notification-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDrecall-notification-service-PROD: msTeams.json +- CDrecall-notification-service-E2E: msTeams.json +- CDrecall-notification-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDrecall-notification-service-PROD: +- name: CD_recall-notification-service PROD +- alertingProfile: CD_recall-notification-service/alerting-profile/CDrecall-notification-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDrecall-notification-service-PROD.EMEA-Prod: +- name: CD_recall-notification-service PROD +- alertingProfile: CD_recall-notification-service/alerting-profile/CDrecall-notification-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDrecall-notification-service-PROD.NA-Prod: +- name: CD_recall-notification-service PROD +- alertingProfile: CD_recall-notification-service/alerting-profile/CDrecall-notification-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDrecall-notification-service-PROD.CN-Prod: +- name: CD_recall-notification-service PROD +- alertingProfile: CD_recall-notification-service/alerting-profile/CDrecall-notification-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDrecall-notification-service-E2E: +- name: CD_recall-notification-service E2E +- alertingProfile: CD_recall-notification-service/alerting-profile/CDrecall-notification-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDrecall-notification-service-E2E.EMEA-Prod: +- name: CD_recall-notification-service E2E +- alertingProfile: CD_recall-notification-service/alerting-profile/CDrecall-notification-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDrecall-notification-service-E2E.NA-Prod: +- name: CD_recall-notification-service E2E +- alertingProfile: CD_recall-notification-service/alerting-profile/CDrecall-notification-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDrecall-notification-service-E2E.CN-Prod: +- name: CD_recall-notification-service E2E +- alertingProfile: CD_recall-notification-service/alerting-profile/CDrecall-notification-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDrecall-notification-service-INT: +- name: CD_recall-notification-service INT +- alertingProfile: CD_recall-notification-service/alerting-profile/CDrecall-notification-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDrecall-notification-service-INT.EMEA-PreProd: +- name: CD_recall-notification-service INT +- alertingProfile: CD_recall-notification-service/alerting-profile/CDrecall-notification-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDrecall-notification-service-INT.NA-PreProd: +- name: CD_recall-notification-service INT +- alertingProfile: CD_recall-notification-service/alerting-profile/CDrecall-notification-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDrecall-notification-service-INT.CN-PreProd: +- name: CD_recall-notification-service INT +- alertingProfile: CD_recall-notification-service/alerting-profile/CDrecall-notification-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-notification-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_recall-notification-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-notification-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-notification-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_recall-notification-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-notification-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-notification-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_recall-notification-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..e57d2dff --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-notification-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- recall-notification-service: default.json + +recall-notification-service: +- name: CD_recall-notification-service - +- mzName: CD_recall-notification-service/management-zone/CDrecall-notification-service.name +- mzId: CD_recall-notification-service/management-zone/CDrecall-notification-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-scheduler-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_recall-scheduler-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..3be3e698 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-scheduler-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDrecall-scheduler-service-PROD: default.json +- CDrecall-scheduler-service-E2E: default.json +- CDrecall-scheduler-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDrecall-scheduler-service-PROD: +- name: CD_recall-scheduler-service PROD +- tag: recall-scheduler-service +- mzId: CD_recall-scheduler-service/management-zone/CDrecall-scheduler-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDrecall-scheduler-service-PROD.EMEA-Prod: +- name: CD_recall-scheduler-service PROD +- tag: recall-scheduler-service +- mzId: CD_recall-scheduler-service/management-zone/CDrecall-scheduler-service.id +- env: PROD +- skipDeployment: "false" +CDrecall-scheduler-service-PROD.NA-Prod: +- name: CD_recall-scheduler-service PROD +- tag: recall-scheduler-service +- mzId: CD_recall-scheduler-service/management-zone/CDrecall-scheduler-service.id +- env: PROD +- skipDeployment: "false" +CDrecall-scheduler-service-PROD.CN-Prod: +- name: CD_recall-scheduler-service PROD +- tag: recall-scheduler-service +- mzId: CD_recall-scheduler-service/management-zone/CDrecall-scheduler-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDrecall-scheduler-service-E2E: +- name: CD_recall-scheduler-service E2E +- tag: recall-scheduler-service +- mzId: CD_recall-scheduler-service/management-zone/CDrecall-scheduler-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDrecall-scheduler-service-E2E.EMEA-Prod: +- name: CD_recall-scheduler-service E2E +- tag: recall-scheduler-service +- mzId: CD_recall-scheduler-service/management-zone/CDrecall-scheduler-service.id +- env: E2E +- skipDeployment: "false" +CDrecall-scheduler-service-E2E.NA-Prod: +- name: CD_recall-scheduler-service E2E +- tag: recall-scheduler-service +- mzId: CD_recall-scheduler-service/management-zone/CDrecall-scheduler-service.id +- env: E2E +- skipDeployment: "false" +CDrecall-scheduler-service-E2E.CN-Prod: +- name: CD_recall-scheduler-service E2E +- tag: recall-scheduler-service +- mzId: CD_recall-scheduler-service/management-zone/CDrecall-scheduler-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDrecall-scheduler-service-INT: +- name: CD_recall-scheduler-service INT +- tag: recall-scheduler-service +- mzId: CD_recall-scheduler-service/management-zone/CDrecall-scheduler-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDrecall-scheduler-service-INT.EMEA-PreProd: +- name: CD_recall-scheduler-service INT +- tag: recall-scheduler-service +- mzId: CD_recall-scheduler-service/management-zone/CDrecall-scheduler-service.id +- env: INT +- skipDeployment: "false" +CDrecall-scheduler-service-INT.NA-PreProd: +- name: CD_recall-scheduler-service INT +- tag: recall-scheduler-service +- mzId: CD_recall-scheduler-service/management-zone/CDrecall-scheduler-service.id +- env: INT +- skipDeployment: "false" +CDrecall-scheduler-service-INT.CN-PreProd: +- name: CD_recall-scheduler-service INT +- tag: recall-scheduler-service +- mzId: CD_recall-scheduler-service/management-zone/CDrecall-scheduler-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-scheduler-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_recall-scheduler-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-scheduler-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-scheduler-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_recall-scheduler-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-scheduler-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-scheduler-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_recall-scheduler-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-scheduler-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-scheduler-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_recall-scheduler-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-scheduler-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-scheduler-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_recall-scheduler-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-scheduler-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-scheduler-service/dashboard/README.md b/BMW-Dynatrace-config/CD_recall-scheduler-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-scheduler-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-scheduler-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_recall-scheduler-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..8c2cb8de --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-scheduler-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDrecall-scheduler-service-PROD-E2E: defaultPRODE2E.json +- CDrecall-scheduler-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDrecall-scheduler-service-PROD-E2E: +- name: CD_recall-scheduler-service PROD +- mzName: CD_recall-scheduler-service/management-zone/CDrecall-scheduler-service.name +- mzId: CD_recall-scheduler-service/management-zone/CDrecall-scheduler-service.id +- skipDeployment: "true" +#Configuration +CDrecall-scheduler-service-PROD-E2E.EMEA-Prod: +- name: CD_recall-scheduler-service PROD +- mzName: CD_recall-scheduler-service/management-zone/CDrecall-scheduler-service.name +- mzId: CD_recall-scheduler-service/management-zone/CDrecall-scheduler-service.id +- tag: recall-scheduler-service +- skipDeployment: "false" +CDrecall-scheduler-service-PROD-E2E.NA-Prod: +- name: CD_recall-scheduler-service PROD +- mzName: CD_recall-scheduler-service/management-zone/CDrecall-scheduler-service.name +- mzId: CD_recall-scheduler-service/management-zone/CDrecall-scheduler-service.id +- tag: recall-scheduler-service +- skipDeployment: "false" +CDrecall-scheduler-service-PROD-E2E.CN-Prod: +- name: CD_recall-scheduler-service PROD +- mzName: CD_recall-scheduler-service/management-zone/CDrecall-scheduler-service.name +- mzId: CD_recall-scheduler-service/management-zone/CDrecall-scheduler-service.id +- tag: recall-scheduler-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDrecall-scheduler-service-INT-TEST: +- name: CD_recall-scheduler-service INT-TEST +- mzName: CD_recall-scheduler-service/management-zone/CDrecall-scheduler-service.name +- mzId: CD_recall-scheduler-service/management-zone/CDrecall-scheduler-service.id +- tag: recall-scheduler-service +- skipDeployment: "true" +#Configuration +CDrecall-scheduler-service-INT-TEST.EMEA-PreProd: +- name: CD_recall-scheduler-service INT-TEST +- mzName: CD_recall-scheduler-service/management-zone/CDrecall-scheduler-service.name +- mzId: CD_recall-scheduler-service/management-zone/CDrecall-scheduler-service.id +- tag: recall-scheduler-service +- skipDeployment: "false" +CDrecall-scheduler-service-INT-TEST.NA-PreProd: +- name: CD_recall-scheduler-service INT-TEST +- mzName: CD_recall-scheduler-service/management-zone/CDrecall-scheduler-service.name +- mzId: CD_recall-scheduler-service/management-zone/CDrecall-scheduler-service.id +- env: INT +- skipDeployment: "false" +CDrecall-scheduler-service-INT-TEST.CN-PreProd: +- name: CD_recall-scheduler-service INT-TEST +- mzName: CD_recall-scheduler-service/management-zone/CDrecall-scheduler-service.name +- mzId: CD_recall-scheduler-service/management-zone/CDrecall-scheduler-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-scheduler-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_recall-scheduler-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-scheduler-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-scheduler-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_recall-scheduler-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-scheduler-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-scheduler-service/management-zone/README.md b/BMW-Dynatrace-config/CD_recall-scheduler-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-scheduler-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_recall-scheduler-service/management-zone/default.json b/BMW-Dynatrace-config/CD_recall-scheduler-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-scheduler-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-scheduler-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_recall-scheduler-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..ba7432d8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-scheduler-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDrecall-scheduler-service: default.json + +CDrecall-scheduler-service: +- name: CD_recall-scheduler-service +- tag: recall-scheduler-service diff --git a/BMW-Dynatrace-config/CD_recall-scheduler-service/notification/README.md b/BMW-Dynatrace-config/CD_recall-scheduler-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-scheduler-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-scheduler-service/notification/email.json b/BMW-Dynatrace-config/CD_recall-scheduler-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-scheduler-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-scheduler-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_recall-scheduler-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-scheduler-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-scheduler-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_recall-scheduler-service/notification/notification.yaml new file mode 100644 index 00000000..851fc1c3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-scheduler-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDrecall-scheduler-service-PROD: msTeams.json +- CDrecall-scheduler-service-E2E: msTeams.json +- CDrecall-scheduler-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDrecall-scheduler-service-PROD: +- name: CD_recall-scheduler-service PROD +- alertingProfile: CD_recall-scheduler-service/alerting-profile/CDrecall-scheduler-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDrecall-scheduler-service-PROD.EMEA-Prod: +- name: CD_recall-scheduler-service PROD +- alertingProfile: CD_recall-scheduler-service/alerting-profile/CDrecall-scheduler-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDrecall-scheduler-service-PROD.NA-Prod: +- name: CD_recall-scheduler-service PROD +- alertingProfile: CD_recall-scheduler-service/alerting-profile/CDrecall-scheduler-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDrecall-scheduler-service-PROD.CN-Prod: +- name: CD_recall-scheduler-service PROD +- alertingProfile: CD_recall-scheduler-service/alerting-profile/CDrecall-scheduler-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDrecall-scheduler-service-E2E: +- name: CD_recall-scheduler-service E2E +- alertingProfile: CD_recall-scheduler-service/alerting-profile/CDrecall-scheduler-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDrecall-scheduler-service-E2E.EMEA-Prod: +- name: CD_recall-scheduler-service E2E +- alertingProfile: CD_recall-scheduler-service/alerting-profile/CDrecall-scheduler-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDrecall-scheduler-service-E2E.NA-Prod: +- name: CD_recall-scheduler-service E2E +- alertingProfile: CD_recall-scheduler-service/alerting-profile/CDrecall-scheduler-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDrecall-scheduler-service-E2E.CN-Prod: +- name: CD_recall-scheduler-service E2E +- alertingProfile: CD_recall-scheduler-service/alerting-profile/CDrecall-scheduler-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDrecall-scheduler-service-INT: +- name: CD_recall-scheduler-service INT +- alertingProfile: CD_recall-scheduler-service/alerting-profile/CDrecall-scheduler-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDrecall-scheduler-service-INT.EMEA-PreProd: +- name: CD_recall-scheduler-service INT +- alertingProfile: CD_recall-scheduler-service/alerting-profile/CDrecall-scheduler-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDrecall-scheduler-service-INT.NA-PreProd: +- name: CD_recall-scheduler-service INT +- alertingProfile: CD_recall-scheduler-service/alerting-profile/CDrecall-scheduler-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDrecall-scheduler-service-INT.CN-PreProd: +- name: CD_recall-scheduler-service INT +- alertingProfile: CD_recall-scheduler-service/alerting-profile/CDrecall-scheduler-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-scheduler-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_recall-scheduler-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-scheduler-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-scheduler-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_recall-scheduler-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-scheduler-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-scheduler-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_recall-scheduler-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..56e04c6d --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-scheduler-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- recall-scheduler-service: default.json + +recall-scheduler-service: +- name: CD_recall-scheduler-service - +- mzName: CD_recall-scheduler-service/management-zone/CDrecall-scheduler-service.name +- mzId: CD_recall-scheduler-service/management-zone/CDrecall-scheduler-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-tcn-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_recall-tcn-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..4a1dab9b --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-tcn-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDrecall-tcn-service-PROD: default.json +- CDrecall-tcn-service-E2E: default.json +- CDrecall-tcn-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDrecall-tcn-service-PROD: +- name: CD_recall-tcn-service PROD +- tag: recall-tcn-service +- mzId: CD_recall-tcn-service/management-zone/CDrecall-tcn-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDrecall-tcn-service-PROD.EMEA-Prod: +- name: CD_recall-tcn-service PROD +- tag: recall-tcn-service +- mzId: CD_recall-tcn-service/management-zone/CDrecall-tcn-service.id +- env: PROD +- skipDeployment: "false" +CDrecall-tcn-service-PROD.NA-Prod: +- name: CD_recall-tcn-service PROD +- tag: recall-tcn-service +- mzId: CD_recall-tcn-service/management-zone/CDrecall-tcn-service.id +- env: PROD +- skipDeployment: "false" +CDrecall-tcn-service-PROD.CN-Prod: +- name: CD_recall-tcn-service PROD +- tag: recall-tcn-service +- mzId: CD_recall-tcn-service/management-zone/CDrecall-tcn-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDrecall-tcn-service-E2E: +- name: CD_recall-tcn-service E2E +- tag: recall-tcn-service +- mzId: CD_recall-tcn-service/management-zone/CDrecall-tcn-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDrecall-tcn-service-E2E.EMEA-Prod: +- name: CD_recall-tcn-service E2E +- tag: recall-tcn-service +- mzId: CD_recall-tcn-service/management-zone/CDrecall-tcn-service.id +- env: E2E +- skipDeployment: "false" +CDrecall-tcn-service-E2E.NA-Prod: +- name: CD_recall-tcn-service E2E +- tag: recall-tcn-service +- mzId: CD_recall-tcn-service/management-zone/CDrecall-tcn-service.id +- env: E2E +- skipDeployment: "false" +CDrecall-tcn-service-E2E.CN-Prod: +- name: CD_recall-tcn-service E2E +- tag: recall-tcn-service +- mzId: CD_recall-tcn-service/management-zone/CDrecall-tcn-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDrecall-tcn-service-INT: +- name: CD_recall-tcn-service INT +- tag: recall-tcn-service +- mzId: CD_recall-tcn-service/management-zone/CDrecall-tcn-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDrecall-tcn-service-INT.EMEA-PreProd: +- name: CD_recall-tcn-service INT +- tag: recall-tcn-service +- mzId: CD_recall-tcn-service/management-zone/CDrecall-tcn-service.id +- env: INT +- skipDeployment: "false" +CDrecall-tcn-service-INT.NA-PreProd: +- name: CD_recall-tcn-service INT +- tag: recall-tcn-service +- mzId: CD_recall-tcn-service/management-zone/CDrecall-tcn-service.id +- env: INT +- skipDeployment: "false" +CDrecall-tcn-service-INT.CN-PreProd: +- name: CD_recall-tcn-service INT +- tag: recall-tcn-service +- mzId: CD_recall-tcn-service/management-zone/CDrecall-tcn-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-tcn-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_recall-tcn-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-tcn-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-tcn-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_recall-tcn-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-tcn-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-tcn-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_recall-tcn-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-tcn-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-tcn-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_recall-tcn-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-tcn-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-tcn-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_recall-tcn-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-tcn-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-tcn-service/dashboard/README.md b/BMW-Dynatrace-config/CD_recall-tcn-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-tcn-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-tcn-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_recall-tcn-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..3aac8556 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-tcn-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDrecall-tcn-service-PROD-E2E: defaultPRODE2E.json +- CDrecall-tcn-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDrecall-tcn-service-PROD-E2E: +- name: CD_recall-tcn-service PROD +- mzName: CD_recall-tcn-service/management-zone/CDrecall-tcn-service.name +- mzId: CD_recall-tcn-service/management-zone/CDrecall-tcn-service.id +- skipDeployment: "true" +#Configuration +CDrecall-tcn-service-PROD-E2E.EMEA-Prod: +- name: CD_recall-tcn-service PROD +- mzName: CD_recall-tcn-service/management-zone/CDrecall-tcn-service.name +- mzId: CD_recall-tcn-service/management-zone/CDrecall-tcn-service.id +- tag: recall-tcn-service +- skipDeployment: "false" +CDrecall-tcn-service-PROD-E2E.NA-Prod: +- name: CD_recall-tcn-service PROD +- mzName: CD_recall-tcn-service/management-zone/CDrecall-tcn-service.name +- mzId: CD_recall-tcn-service/management-zone/CDrecall-tcn-service.id +- tag: recall-tcn-service +- skipDeployment: "false" +CDrecall-tcn-service-PROD-E2E.CN-Prod: +- name: CD_recall-tcn-service PROD +- mzName: CD_recall-tcn-service/management-zone/CDrecall-tcn-service.name +- mzId: CD_recall-tcn-service/management-zone/CDrecall-tcn-service.id +- tag: recall-tcn-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDrecall-tcn-service-INT-TEST: +- name: CD_recall-tcn-service INT-TEST +- mzName: CD_recall-tcn-service/management-zone/CDrecall-tcn-service.name +- mzId: CD_recall-tcn-service/management-zone/CDrecall-tcn-service.id +- tag: recall-tcn-service +- skipDeployment: "true" +#Configuration +CDrecall-tcn-service-INT-TEST.EMEA-PreProd: +- name: CD_recall-tcn-service INT-TEST +- mzName: CD_recall-tcn-service/management-zone/CDrecall-tcn-service.name +- mzId: CD_recall-tcn-service/management-zone/CDrecall-tcn-service.id +- tag: recall-tcn-service +- skipDeployment: "false" +CDrecall-tcn-service-INT-TEST.NA-PreProd: +- name: CD_recall-tcn-service INT-TEST +- mzName: CD_recall-tcn-service/management-zone/CDrecall-tcn-service.name +- mzId: CD_recall-tcn-service/management-zone/CDrecall-tcn-service.id +- env: INT +- skipDeployment: "false" +CDrecall-tcn-service-INT-TEST.CN-PreProd: +- name: CD_recall-tcn-service INT-TEST +- mzName: CD_recall-tcn-service/management-zone/CDrecall-tcn-service.name +- mzId: CD_recall-tcn-service/management-zone/CDrecall-tcn-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-tcn-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_recall-tcn-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-tcn-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-tcn-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_recall-tcn-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-tcn-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-tcn-service/management-zone/README.md b/BMW-Dynatrace-config/CD_recall-tcn-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-tcn-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_recall-tcn-service/management-zone/default.json b/BMW-Dynatrace-config/CD_recall-tcn-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-tcn-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-tcn-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_recall-tcn-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..abb1cab7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-tcn-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDrecall-tcn-service: default.json + +CDrecall-tcn-service: +- name: CD_recall-tcn-service +- tag: recall-tcn-service diff --git a/BMW-Dynatrace-config/CD_recall-tcn-service/notification/README.md b/BMW-Dynatrace-config/CD_recall-tcn-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-tcn-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-tcn-service/notification/email.json b/BMW-Dynatrace-config/CD_recall-tcn-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-tcn-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-tcn-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_recall-tcn-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-tcn-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-tcn-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_recall-tcn-service/notification/notification.yaml new file mode 100644 index 00000000..72a7805e --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-tcn-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDrecall-tcn-service-PROD: msTeams.json +- CDrecall-tcn-service-E2E: msTeams.json +- CDrecall-tcn-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDrecall-tcn-service-PROD: +- name: CD_recall-tcn-service PROD +- alertingProfile: CD_recall-tcn-service/alerting-profile/CDrecall-tcn-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDrecall-tcn-service-PROD.EMEA-Prod: +- name: CD_recall-tcn-service PROD +- alertingProfile: CD_recall-tcn-service/alerting-profile/CDrecall-tcn-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDrecall-tcn-service-PROD.NA-Prod: +- name: CD_recall-tcn-service PROD +- alertingProfile: CD_recall-tcn-service/alerting-profile/CDrecall-tcn-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDrecall-tcn-service-PROD.CN-Prod: +- name: CD_recall-tcn-service PROD +- alertingProfile: CD_recall-tcn-service/alerting-profile/CDrecall-tcn-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDrecall-tcn-service-E2E: +- name: CD_recall-tcn-service E2E +- alertingProfile: CD_recall-tcn-service/alerting-profile/CDrecall-tcn-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDrecall-tcn-service-E2E.EMEA-Prod: +- name: CD_recall-tcn-service E2E +- alertingProfile: CD_recall-tcn-service/alerting-profile/CDrecall-tcn-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDrecall-tcn-service-E2E.NA-Prod: +- name: CD_recall-tcn-service E2E +- alertingProfile: CD_recall-tcn-service/alerting-profile/CDrecall-tcn-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDrecall-tcn-service-E2E.CN-Prod: +- name: CD_recall-tcn-service E2E +- alertingProfile: CD_recall-tcn-service/alerting-profile/CDrecall-tcn-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDrecall-tcn-service-INT: +- name: CD_recall-tcn-service INT +- alertingProfile: CD_recall-tcn-service/alerting-profile/CDrecall-tcn-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDrecall-tcn-service-INT.EMEA-PreProd: +- name: CD_recall-tcn-service INT +- alertingProfile: CD_recall-tcn-service/alerting-profile/CDrecall-tcn-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDrecall-tcn-service-INT.NA-PreProd: +- name: CD_recall-tcn-service INT +- alertingProfile: CD_recall-tcn-service/alerting-profile/CDrecall-tcn-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDrecall-tcn-service-INT.CN-PreProd: +- name: CD_recall-tcn-service INT +- alertingProfile: CD_recall-tcn-service/alerting-profile/CDrecall-tcn-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-tcn-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_recall-tcn-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-tcn-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-tcn-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_recall-tcn-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-tcn-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-tcn-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_recall-tcn-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..60efc776 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-tcn-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- recall-tcn-service: default.json + +recall-tcn-service: +- name: CD_recall-tcn-service - +- mzName: CD_recall-tcn-service/management-zone/CDrecall-tcn-service.name +- mzId: CD_recall-tcn-service/management-zone/CDrecall-tcn-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-360-composite-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_remote-360-composite-service/alerting-profile/alerting-profile.yaml index 58ddc1b2..d87a6ca2 100644 --- a/BMW-Dynatrace-config/CD_remote-360-composite-service/alerting-profile/alerting-profile.yaml +++ b/BMW-Dynatrace-config/CD_remote-360-composite-service/alerting-profile/alerting-profile.yaml @@ -1,6 +1,88 @@ -CDremote-360-composite-service: -- name: CD_remote-360-composite-service/management-zone/CDremote-360-composite-service.name +config: +- CDremote-360-composite-service-PROD: default.json +- CDremote-360-composite-service-E2E: default.json +- CDremote-360-composite-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDremote-360-composite-service-PROD: +- name: CD_remote-360-composite-service PROD - tag: remote-360-composite-service - mzId: CD_remote-360-composite-service/management-zone/CDremote-360-composite-service.id -config: -- CDremote-360-composite-service: remote-360-composite-service.json +- env: PROD +- skipDeployment: "true" +#Configuration +CDremote-360-composite-service-PROD.EMEA-Prod: +- name: CD_remote-360-composite-service PROD +- tag: remote-360-composite-service +- mzId: CD_remote-360-composite-service/management-zone/CDremote-360-composite-service.id +- env: PROD +- skipDeployment: "false" +CDremote-360-composite-service-PROD.NA-Prod: +- name: CD_remote-360-composite-service PROD +- tag: remote-360-composite-service +- mzId: CD_remote-360-composite-service/management-zone/CDremote-360-composite-service.id +- env: PROD +- skipDeployment: "false" +CDremote-360-composite-service-PROD.CN-Prod: +- name: CD_remote-360-composite-service PROD +- tag: remote-360-composite-service +- mzId: CD_remote-360-composite-service/management-zone/CDremote-360-composite-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDremote-360-composite-service-E2E: +- name: CD_remote-360-composite-service E2E +- tag: remote-360-composite-service +- mzId: CD_remote-360-composite-service/management-zone/CDremote-360-composite-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDremote-360-composite-service-E2E.EMEA-Prod: +- name: CD_remote-360-composite-service E2E +- tag: remote-360-composite-service +- mzId: CD_remote-360-composite-service/management-zone/CDremote-360-composite-service.id +- env: E2E +- skipDeployment: "false" +CDremote-360-composite-service-E2E.NA-Prod: +- name: CD_remote-360-composite-service E2E +- tag: remote-360-composite-service +- mzId: CD_remote-360-composite-service/management-zone/CDremote-360-composite-service.id +- env: E2E +- skipDeployment: "false" +CDremote-360-composite-service-E2E.CN-Prod: +- name: CD_remote-360-composite-service E2E +- tag: remote-360-composite-service +- mzId: CD_remote-360-composite-service/management-zone/CDremote-360-composite-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDremote-360-composite-service-INT: +- name: CD_remote-360-composite-service INT +- tag: remote-360-composite-service +- mzId: CD_remote-360-composite-service/management-zone/CDremote-360-composite-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDremote-360-composite-service-INT.EMEA-PreProd: +- name: CD_remote-360-composite-service INT +- tag: remote-360-composite-service +- mzId: CD_remote-360-composite-service/management-zone/CDremote-360-composite-service.id +- env: INT +- skipDeployment: "false" +CDremote-360-composite-service-INT.NA-PreProd: +- name: CD_remote-360-composite-service INT +- tag: remote-360-composite-service +- mzId: CD_remote-360-composite-service/management-zone/CDremote-360-composite-service.id +- env: INT +- skipDeployment: "false" +CDremote-360-composite-service-INT.CN-PreProd: +- name: CD_remote-360-composite-service INT +- tag: remote-360-composite-service +- mzId: CD_remote-360-composite-service/management-zone/CDremote-360-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-360-composite-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_remote-360-composite-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-360-composite-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-360-composite-service/alerting-profile/remote-360-composite-service.json b/BMW-Dynatrace-config/CD_remote-360-composite-service/alerting-profile/remote-360-composite-service.json deleted file mode 100644 index d10ad44a..00000000 --- a/BMW-Dynatrace-config/CD_remote-360-composite-service/alerting-profile/remote-360-composite-service.json +++ /dev/null @@ -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}}" - } - ] - } - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-360-composite-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_remote-360-composite-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-360-composite-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-360-composite-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_remote-360-composite-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-360-composite-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-360-composite-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_remote-360-composite-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-360-composite-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-360-composite-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_remote-360-composite-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-360-composite-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-360-composite-service/dashboard/README.md b/BMW-Dynatrace-config/CD_remote-360-composite-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-360-composite-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-360-composite-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_remote-360-composite-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..d0f02a15 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-360-composite-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDremote-360-composite-service-PROD-E2E: defaultPRODE2E.json +- CDremote-360-composite-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDremote-360-composite-service-PROD-E2E: +- name: CD_remote-360-composite-service PROD +- mzName: CD_remote-360-composite-service/management-zone/CDremote-360-composite-service.name +- mzId: CD_remote-360-composite-service/management-zone/CDremote-360-composite-service.id +- skipDeployment: "true" +#Configuration +CDremote-360-composite-service-PROD-E2E.EMEA-Prod: +- name: CD_remote-360-composite-service PROD +- mzName: CD_remote-360-composite-service/management-zone/CDremote-360-composite-service.name +- mzId: CD_remote-360-composite-service/management-zone/CDremote-360-composite-service.id +- tag: remote-360-composite-service +- skipDeployment: "false" +CDremote-360-composite-service-PROD-E2E.NA-Prod: +- name: CD_remote-360-composite-service PROD +- mzName: CD_remote-360-composite-service/management-zone/CDremote-360-composite-service.name +- mzId: CD_remote-360-composite-service/management-zone/CDremote-360-composite-service.id +- tag: remote-360-composite-service +- skipDeployment: "false" +CDremote-360-composite-service-PROD-E2E.CN-Prod: +- name: CD_remote-360-composite-service PROD +- mzName: CD_remote-360-composite-service/management-zone/CDremote-360-composite-service.name +- mzId: CD_remote-360-composite-service/management-zone/CDremote-360-composite-service.id +- tag: remote-360-composite-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDremote-360-composite-service-INT-TEST: +- name: CD_remote-360-composite-service INT-TEST +- mzName: CD_remote-360-composite-service/management-zone/CDremote-360-composite-service.name +- mzId: CD_remote-360-composite-service/management-zone/CDremote-360-composite-service.id +- tag: remote-360-composite-service +- skipDeployment: "true" +#Configuration +CDremote-360-composite-service-INT-TEST.EMEA-PreProd: +- name: CD_remote-360-composite-service INT-TEST +- mzName: CD_remote-360-composite-service/management-zone/CDremote-360-composite-service.name +- mzId: CD_remote-360-composite-service/management-zone/CDremote-360-composite-service.id +- tag: remote-360-composite-service +- skipDeployment: "false" +CDremote-360-composite-service-INT-TEST.NA-PreProd: +- name: CD_remote-360-composite-service INT-TEST +- mzName: CD_remote-360-composite-service/management-zone/CDremote-360-composite-service.name +- mzId: CD_remote-360-composite-service/management-zone/CDremote-360-composite-service.id +- env: INT +- skipDeployment: "false" +CDremote-360-composite-service-INT-TEST.CN-PreProd: +- name: CD_remote-360-composite-service INT-TEST +- mzName: CD_remote-360-composite-service/management-zone/CDremote-360-composite-service.name +- mzId: CD_remote-360-composite-service/management-zone/CDremote-360-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-360-composite-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_remote-360-composite-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-360-composite-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-360-composite-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_remote-360-composite-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-360-composite-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-360-composite-service/management-zone/CDremote-360-composite-service.json b/BMW-Dynatrace-config/CD_remote-360-composite-service/management-zone/CDremote-360-composite-service.json deleted file mode 100644 index b2a9367b..00000000 --- a/BMW-Dynatrace-config/CD_remote-360-composite-service/management-zone/CDremote-360-composite-service.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "dimensionalRules": [], - "name": "{{.name}}", - "rules": [ - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "{{.tag}}" - } - }, - "key": { - "attribute": "SERVICE_TAGS" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "HealthResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PingResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PrometheusResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - } - ], - "enabled": true, - "propagationTypes": [ - "SERVICE_TO_PROCESS_GROUP_LIKE", - "SERVICE_TO_HOST_LIKE" - ], - "type": "SERVICE" - }, - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "{{.tag}}" - } - }, - "key": { - "attribute": "PROCESS_GROUP_TAGS" - } - } - ], - "enabled": true, - "propagationTypes": [ - "PROCESS_GROUP_TO_HOST" - ], - "type": "PROCESS_GROUP" - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-360-composite-service/management-zone/README.md b/BMW-Dynatrace-config/CD_remote-360-composite-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-360-composite-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_remote-360-composite-service/management-zone/default.json b/BMW-Dynatrace-config/CD_remote-360-composite-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-360-composite-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-360-composite-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_remote-360-composite-service/management-zone/management-zone.yaml index 3d7c4535..3afaef07 100644 --- a/BMW-Dynatrace-config/CD_remote-360-composite-service/management-zone/management-zone.yaml +++ b/BMW-Dynatrace-config/CD_remote-360-composite-service/management-zone/management-zone.yaml @@ -1,20 +1,6 @@ -CDremote-360-composite-service.CN-PreProd: -- name: CD_remote-360-composite-service -- tag: remote-360-composite-service -CDremote-360-composite-service.CN-Prod: -- name: CD_remote-360-composite-service -- tag: remote-360-composite-service -CDremote-360-composite-service.EMEA-PreProd: -- name: CD_remote-360-composite-service -- tag: remote-360-composite-service -CDremote-360-composite-service.EMEA-Prod: -- name: CD_remote-360-composite-service -- tag: remote-360-composite-service -CDremote-360-composite-service.NA-PreProd: -- name: CD_remote-360-composite-service -- tag: remote-360-composite-service -CDremote-360-composite-service.NA-Prod: -- name: CD_remote-360-composite-service -- tag: remote-360-composite-service config: -- CDremote-360-composite-service: CDremote-360-composite-service.json +- CDremote-360-composite-service: default.json + +CDremote-360-composite-service: +- name: CD_remote-360-composite-service +- tag: remote-360-composite-service diff --git a/BMW-Dynatrace-config/CD_remote-360-composite-service/notification/README.md b/BMW-Dynatrace-config/CD_remote-360-composite-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-360-composite-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-360-composite-service/notification/email.json b/BMW-Dynatrace-config/CD_remote-360-composite-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-360-composite-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-360-composite-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_remote-360-composite-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-360-composite-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-360-composite-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_remote-360-composite-service/notification/notification.yaml new file mode 100644 index 00000000..26ccc631 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-360-composite-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDremote-360-composite-service-PROD: msTeams.json +- CDremote-360-composite-service-E2E: msTeams.json +- CDremote-360-composite-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDremote-360-composite-service-PROD: +- name: CD_remote-360-composite-service PROD +- alertingProfile: CD_remote-360-composite-service/alerting-profile/CDremote-360-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDremote-360-composite-service-PROD.EMEA-Prod: +- name: CD_remote-360-composite-service PROD +- alertingProfile: CD_remote-360-composite-service/alerting-profile/CDremote-360-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDremote-360-composite-service-PROD.NA-Prod: +- name: CD_remote-360-composite-service PROD +- alertingProfile: CD_remote-360-composite-service/alerting-profile/CDremote-360-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDremote-360-composite-service-PROD.CN-Prod: +- name: CD_remote-360-composite-service PROD +- alertingProfile: CD_remote-360-composite-service/alerting-profile/CDremote-360-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDremote-360-composite-service-E2E: +- name: CD_remote-360-composite-service E2E +- alertingProfile: CD_remote-360-composite-service/alerting-profile/CDremote-360-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDremote-360-composite-service-E2E.EMEA-Prod: +- name: CD_remote-360-composite-service E2E +- alertingProfile: CD_remote-360-composite-service/alerting-profile/CDremote-360-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDremote-360-composite-service-E2E.NA-Prod: +- name: CD_remote-360-composite-service E2E +- alertingProfile: CD_remote-360-composite-service/alerting-profile/CDremote-360-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDremote-360-composite-service-E2E.CN-Prod: +- name: CD_remote-360-composite-service E2E +- alertingProfile: CD_remote-360-composite-service/alerting-profile/CDremote-360-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDremote-360-composite-service-INT: +- name: CD_remote-360-composite-service INT +- alertingProfile: CD_remote-360-composite-service/alerting-profile/CDremote-360-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDremote-360-composite-service-INT.EMEA-PreProd: +- name: CD_remote-360-composite-service INT +- alertingProfile: CD_remote-360-composite-service/alerting-profile/CDremote-360-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDremote-360-composite-service-INT.NA-PreProd: +- name: CD_remote-360-composite-service INT +- alertingProfile: CD_remote-360-composite-service/alerting-profile/CDremote-360-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDremote-360-composite-service-INT.CN-PreProd: +- name: CD_remote-360-composite-service INT +- alertingProfile: CD_remote-360-composite-service/alerting-profile/CDremote-360-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-360-composite-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_remote-360-composite-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-360-composite-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-360-composite-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_remote-360-composite-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-360-composite-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-360-composite-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_remote-360-composite-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..a7af15ab --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-360-composite-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- remote-360-composite-service: default.json + +remote-360-composite-service: +- name: CD_remote-360-composite-service - +- mzName: CD_remote-360-composite-service/management-zone/CDremote-360-composite-service.name +- mzId: CD_remote-360-composite-service/management-zone/CDremote-360-composite-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service-event-processor/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_remote-service-event-processor/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..5b8ea3ed --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service-event-processor/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDremote-service-event-processor-PROD: default.json +- CDremote-service-event-processor-E2E: default.json +- CDremote-service-event-processor-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDremote-service-event-processor-PROD: +- name: CD_remote-service-event-processor PROD +- tag: remote-service-event-processor +- mzId: CD_remote-service-event-processor/management-zone/CDremote-service-event-processor.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDremote-service-event-processor-PROD.EMEA-Prod: +- name: CD_remote-service-event-processor PROD +- tag: remote-service-event-processor +- mzId: CD_remote-service-event-processor/management-zone/CDremote-service-event-processor.id +- env: PROD +- skipDeployment: "false" +CDremote-service-event-processor-PROD.NA-Prod: +- name: CD_remote-service-event-processor PROD +- tag: remote-service-event-processor +- mzId: CD_remote-service-event-processor/management-zone/CDremote-service-event-processor.id +- env: PROD +- skipDeployment: "false" +CDremote-service-event-processor-PROD.CN-Prod: +- name: CD_remote-service-event-processor PROD +- tag: remote-service-event-processor +- mzId: CD_remote-service-event-processor/management-zone/CDremote-service-event-processor.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDremote-service-event-processor-E2E: +- name: CD_remote-service-event-processor E2E +- tag: remote-service-event-processor +- mzId: CD_remote-service-event-processor/management-zone/CDremote-service-event-processor.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDremote-service-event-processor-E2E.EMEA-Prod: +- name: CD_remote-service-event-processor E2E +- tag: remote-service-event-processor +- mzId: CD_remote-service-event-processor/management-zone/CDremote-service-event-processor.id +- env: E2E +- skipDeployment: "false" +CDremote-service-event-processor-E2E.NA-Prod: +- name: CD_remote-service-event-processor E2E +- tag: remote-service-event-processor +- mzId: CD_remote-service-event-processor/management-zone/CDremote-service-event-processor.id +- env: E2E +- skipDeployment: "false" +CDremote-service-event-processor-E2E.CN-Prod: +- name: CD_remote-service-event-processor E2E +- tag: remote-service-event-processor +- mzId: CD_remote-service-event-processor/management-zone/CDremote-service-event-processor.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDremote-service-event-processor-INT: +- name: CD_remote-service-event-processor INT +- tag: remote-service-event-processor +- mzId: CD_remote-service-event-processor/management-zone/CDremote-service-event-processor.id +- env: INT +- skipDeployment: "true" +#Configuration +CDremote-service-event-processor-INT.EMEA-PreProd: +- name: CD_remote-service-event-processor INT +- tag: remote-service-event-processor +- mzId: CD_remote-service-event-processor/management-zone/CDremote-service-event-processor.id +- env: INT +- skipDeployment: "false" +CDremote-service-event-processor-INT.NA-PreProd: +- name: CD_remote-service-event-processor INT +- tag: remote-service-event-processor +- mzId: CD_remote-service-event-processor/management-zone/CDremote-service-event-processor.id +- env: INT +- skipDeployment: "false" +CDremote-service-event-processor-INT.CN-PreProd: +- name: CD_remote-service-event-processor INT +- tag: remote-service-event-processor +- mzId: CD_remote-service-event-processor/management-zone/CDremote-service-event-processor.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service-event-processor/alerting-profile/default.json b/BMW-Dynatrace-config/CD_remote-service-event-processor/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service-event-processor/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service-event-processor/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_remote-service-event-processor/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service-event-processor/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service-event-processor/custom-service-java/README.md b/BMW-Dynatrace-config/CD_remote-service-event-processor/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service-event-processor/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service-event-processor/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_remote-service-event-processor/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service-event-processor/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service-event-processor/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_remote-service-event-processor/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service-event-processor/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service-event-processor/dashboard/README.md b/BMW-Dynatrace-config/CD_remote-service-event-processor/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service-event-processor/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service-event-processor/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_remote-service-event-processor/dashboard/dashboard.yaml new file mode 100644 index 00000000..a6799f05 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service-event-processor/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDremote-service-event-processor-PROD-E2E: defaultPRODE2E.json +- CDremote-service-event-processor-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDremote-service-event-processor-PROD-E2E: +- name: CD_remote-service-event-processor PROD +- mzName: CD_remote-service-event-processor/management-zone/CDremote-service-event-processor.name +- mzId: CD_remote-service-event-processor/management-zone/CDremote-service-event-processor.id +- skipDeployment: "true" +#Configuration +CDremote-service-event-processor-PROD-E2E.EMEA-Prod: +- name: CD_remote-service-event-processor PROD +- mzName: CD_remote-service-event-processor/management-zone/CDremote-service-event-processor.name +- mzId: CD_remote-service-event-processor/management-zone/CDremote-service-event-processor.id +- tag: remote-service-event-processor +- skipDeployment: "false" +CDremote-service-event-processor-PROD-E2E.NA-Prod: +- name: CD_remote-service-event-processor PROD +- mzName: CD_remote-service-event-processor/management-zone/CDremote-service-event-processor.name +- mzId: CD_remote-service-event-processor/management-zone/CDremote-service-event-processor.id +- tag: remote-service-event-processor +- skipDeployment: "false" +CDremote-service-event-processor-PROD-E2E.CN-Prod: +- name: CD_remote-service-event-processor PROD +- mzName: CD_remote-service-event-processor/management-zone/CDremote-service-event-processor.name +- mzId: CD_remote-service-event-processor/management-zone/CDremote-service-event-processor.id +- tag: remote-service-event-processor +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDremote-service-event-processor-INT-TEST: +- name: CD_remote-service-event-processor INT-TEST +- mzName: CD_remote-service-event-processor/management-zone/CDremote-service-event-processor.name +- mzId: CD_remote-service-event-processor/management-zone/CDremote-service-event-processor.id +- tag: remote-service-event-processor +- skipDeployment: "true" +#Configuration +CDremote-service-event-processor-INT-TEST.EMEA-PreProd: +- name: CD_remote-service-event-processor INT-TEST +- mzName: CD_remote-service-event-processor/management-zone/CDremote-service-event-processor.name +- mzId: CD_remote-service-event-processor/management-zone/CDremote-service-event-processor.id +- tag: remote-service-event-processor +- skipDeployment: "false" +CDremote-service-event-processor-INT-TEST.NA-PreProd: +- name: CD_remote-service-event-processor INT-TEST +- mzName: CD_remote-service-event-processor/management-zone/CDremote-service-event-processor.name +- mzId: CD_remote-service-event-processor/management-zone/CDremote-service-event-processor.id +- env: INT +- skipDeployment: "false" +CDremote-service-event-processor-INT-TEST.CN-PreProd: +- name: CD_remote-service-event-processor INT-TEST +- mzName: CD_remote-service-event-processor/management-zone/CDremote-service-event-processor.name +- mzId: CD_remote-service-event-processor/management-zone/CDremote-service-event-processor.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service-event-processor/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_remote-service-event-processor/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service-event-processor/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service-event-processor/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_remote-service-event-processor/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service-event-processor/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service-event-processor/management-zone/README.md b/BMW-Dynatrace-config/CD_remote-service-event-processor/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service-event-processor/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_remote-service-event-processor/management-zone/default.json b/BMW-Dynatrace-config/CD_remote-service-event-processor/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service-event-processor/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service-event-processor/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_remote-service-event-processor/management-zone/management-zone.yaml new file mode 100644 index 00000000..a71acf7f --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service-event-processor/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDremote-service-event-processor: default.json + +CDremote-service-event-processor: +- name: CD_remote-service-event-processor +- tag: remote-service-event-processor diff --git a/BMW-Dynatrace-config/CD_remote-service-event-processor/notification/README.md b/BMW-Dynatrace-config/CD_remote-service-event-processor/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service-event-processor/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service-event-processor/notification/email.json b/BMW-Dynatrace-config/CD_remote-service-event-processor/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service-event-processor/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service-event-processor/notification/msTeams.json b/BMW-Dynatrace-config/CD_remote-service-event-processor/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service-event-processor/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service-event-processor/notification/notification.yaml b/BMW-Dynatrace-config/CD_remote-service-event-processor/notification/notification.yaml new file mode 100644 index 00000000..b07d6370 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service-event-processor/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDremote-service-event-processor-PROD: msTeams.json +- CDremote-service-event-processor-E2E: msTeams.json +- CDremote-service-event-processor-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDremote-service-event-processor-PROD: +- name: CD_remote-service-event-processor PROD +- alertingProfile: CD_remote-service-event-processor/alerting-profile/CDremote-service-event-processor-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDremote-service-event-processor-PROD.EMEA-Prod: +- name: CD_remote-service-event-processor PROD +- alertingProfile: CD_remote-service-event-processor/alerting-profile/CDremote-service-event-processor-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDremote-service-event-processor-PROD.NA-Prod: +- name: CD_remote-service-event-processor PROD +- alertingProfile: CD_remote-service-event-processor/alerting-profile/CDremote-service-event-processor-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDremote-service-event-processor-PROD.CN-Prod: +- name: CD_remote-service-event-processor PROD +- alertingProfile: CD_remote-service-event-processor/alerting-profile/CDremote-service-event-processor-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDremote-service-event-processor-E2E: +- name: CD_remote-service-event-processor E2E +- alertingProfile: CD_remote-service-event-processor/alerting-profile/CDremote-service-event-processor-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDremote-service-event-processor-E2E.EMEA-Prod: +- name: CD_remote-service-event-processor E2E +- alertingProfile: CD_remote-service-event-processor/alerting-profile/CDremote-service-event-processor-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDremote-service-event-processor-E2E.NA-Prod: +- name: CD_remote-service-event-processor E2E +- alertingProfile: CD_remote-service-event-processor/alerting-profile/CDremote-service-event-processor-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDremote-service-event-processor-E2E.CN-Prod: +- name: CD_remote-service-event-processor E2E +- alertingProfile: CD_remote-service-event-processor/alerting-profile/CDremote-service-event-processor-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDremote-service-event-processor-INT: +- name: CD_remote-service-event-processor INT +- alertingProfile: CD_remote-service-event-processor/alerting-profile/CDremote-service-event-processor-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDremote-service-event-processor-INT.EMEA-PreProd: +- name: CD_remote-service-event-processor INT +- alertingProfile: CD_remote-service-event-processor/alerting-profile/CDremote-service-event-processor-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDremote-service-event-processor-INT.NA-PreProd: +- name: CD_remote-service-event-processor INT +- alertingProfile: CD_remote-service-event-processor/alerting-profile/CDremote-service-event-processor-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDremote-service-event-processor-INT.CN-PreProd: +- name: CD_remote-service-event-processor INT +- alertingProfile: CD_remote-service-event-processor/alerting-profile/CDremote-service-event-processor-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service-event-processor/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_remote-service-event-processor/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service-event-processor/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service-event-processor/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_remote-service-event-processor/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service-event-processor/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service-event-processor/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_remote-service-event-processor/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..8a849fff --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service-event-processor/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- remote-service-event-processor: default.json + +remote-service-event-processor: +- name: CD_remote-service-event-processor - +- mzName: CD_remote-service-event-processor/management-zone/CDremote-service-event-processor.name +- mzId: CD_remote-service-event-processor/management-zone/CDremote-service-event-processor.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_remote-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..1e1cb3b4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDremote-service-PROD: default.json +- CDremote-service-E2E: default.json +- CDremote-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDremote-service-PROD: +- name: CD_remote-service PROD +- tag: remote-service +- mzId: CD_remote-service/management-zone/CDremote-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDremote-service-PROD.EMEA-Prod: +- name: CD_remote-service PROD +- tag: remote-service +- mzId: CD_remote-service/management-zone/CDremote-service.id +- env: PROD +- skipDeployment: "false" +CDremote-service-PROD.NA-Prod: +- name: CD_remote-service PROD +- tag: remote-service +- mzId: CD_remote-service/management-zone/CDremote-service.id +- env: PROD +- skipDeployment: "false" +CDremote-service-PROD.CN-Prod: +- name: CD_remote-service PROD +- tag: remote-service +- mzId: CD_remote-service/management-zone/CDremote-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDremote-service-E2E: +- name: CD_remote-service E2E +- tag: remote-service +- mzId: CD_remote-service/management-zone/CDremote-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDremote-service-E2E.EMEA-Prod: +- name: CD_remote-service E2E +- tag: remote-service +- mzId: CD_remote-service/management-zone/CDremote-service.id +- env: E2E +- skipDeployment: "false" +CDremote-service-E2E.NA-Prod: +- name: CD_remote-service E2E +- tag: remote-service +- mzId: CD_remote-service/management-zone/CDremote-service.id +- env: E2E +- skipDeployment: "false" +CDremote-service-E2E.CN-Prod: +- name: CD_remote-service E2E +- tag: remote-service +- mzId: CD_remote-service/management-zone/CDremote-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDremote-service-INT: +- name: CD_remote-service INT +- tag: remote-service +- mzId: CD_remote-service/management-zone/CDremote-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDremote-service-INT.EMEA-PreProd: +- name: CD_remote-service INT +- tag: remote-service +- mzId: CD_remote-service/management-zone/CDremote-service.id +- env: INT +- skipDeployment: "false" +CDremote-service-INT.NA-PreProd: +- name: CD_remote-service INT +- tag: remote-service +- mzId: CD_remote-service/management-zone/CDremote-service.id +- env: INT +- skipDeployment: "false" +CDremote-service-INT.CN-PreProd: +- name: CD_remote-service INT +- tag: remote-service +- mzId: CD_remote-service/management-zone/CDremote-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_remote-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_remote-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_remote-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_remote-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_remote-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service/dashboard/README.md b/BMW-Dynatrace-config/CD_remote-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_remote-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..3958afb8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDremote-service-PROD-E2E: defaultPRODE2E.json +- CDremote-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDremote-service-PROD-E2E: +- name: CD_remote-service PROD +- mzName: CD_remote-service/management-zone/CDremote-service.name +- mzId: CD_remote-service/management-zone/CDremote-service.id +- skipDeployment: "true" +#Configuration +CDremote-service-PROD-E2E.EMEA-Prod: +- name: CD_remote-service PROD +- mzName: CD_remote-service/management-zone/CDremote-service.name +- mzId: CD_remote-service/management-zone/CDremote-service.id +- tag: remote-service +- skipDeployment: "false" +CDremote-service-PROD-E2E.NA-Prod: +- name: CD_remote-service PROD +- mzName: CD_remote-service/management-zone/CDremote-service.name +- mzId: CD_remote-service/management-zone/CDremote-service.id +- tag: remote-service +- skipDeployment: "false" +CDremote-service-PROD-E2E.CN-Prod: +- name: CD_remote-service PROD +- mzName: CD_remote-service/management-zone/CDremote-service.name +- mzId: CD_remote-service/management-zone/CDremote-service.id +- tag: remote-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDremote-service-INT-TEST: +- name: CD_remote-service INT-TEST +- mzName: CD_remote-service/management-zone/CDremote-service.name +- mzId: CD_remote-service/management-zone/CDremote-service.id +- tag: remote-service +- skipDeployment: "true" +#Configuration +CDremote-service-INT-TEST.EMEA-PreProd: +- name: CD_remote-service INT-TEST +- mzName: CD_remote-service/management-zone/CDremote-service.name +- mzId: CD_remote-service/management-zone/CDremote-service.id +- tag: remote-service +- skipDeployment: "false" +CDremote-service-INT-TEST.NA-PreProd: +- name: CD_remote-service INT-TEST +- mzName: CD_remote-service/management-zone/CDremote-service.name +- mzId: CD_remote-service/management-zone/CDremote-service.id +- env: INT +- skipDeployment: "false" +CDremote-service-INT-TEST.CN-PreProd: +- name: CD_remote-service INT-TEST +- mzName: CD_remote-service/management-zone/CDremote-service.name +- mzId: CD_remote-service/management-zone/CDremote-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_remote-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_remote-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service/management-zone/README.md b/BMW-Dynatrace-config/CD_remote-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_remote-service/management-zone/default.json b/BMW-Dynatrace-config/CD_remote-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_remote-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..ed90c6ec --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDremote-service: default.json + +CDremote-service: +- name: CD_remote-service +- tag: remote-service diff --git a/BMW-Dynatrace-config/CD_remote-service/notification/README.md b/BMW-Dynatrace-config/CD_remote-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service/notification/email.json b/BMW-Dynatrace-config/CD_remote-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_remote-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_remote-service/notification/notification.yaml new file mode 100644 index 00000000..d98384a6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDremote-service-PROD: msTeams.json +- CDremote-service-E2E: msTeams.json +- CDremote-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDremote-service-PROD: +- name: CD_remote-service PROD +- alertingProfile: CD_remote-service/alerting-profile/CDremote-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDremote-service-PROD.EMEA-Prod: +- name: CD_remote-service PROD +- alertingProfile: CD_remote-service/alerting-profile/CDremote-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDremote-service-PROD.NA-Prod: +- name: CD_remote-service PROD +- alertingProfile: CD_remote-service/alerting-profile/CDremote-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDremote-service-PROD.CN-Prod: +- name: CD_remote-service PROD +- alertingProfile: CD_remote-service/alerting-profile/CDremote-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDremote-service-E2E: +- name: CD_remote-service E2E +- alertingProfile: CD_remote-service/alerting-profile/CDremote-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDremote-service-E2E.EMEA-Prod: +- name: CD_remote-service E2E +- alertingProfile: CD_remote-service/alerting-profile/CDremote-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDremote-service-E2E.NA-Prod: +- name: CD_remote-service E2E +- alertingProfile: CD_remote-service/alerting-profile/CDremote-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDremote-service-E2E.CN-Prod: +- name: CD_remote-service E2E +- alertingProfile: CD_remote-service/alerting-profile/CDremote-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDremote-service-INT: +- name: CD_remote-service INT +- alertingProfile: CD_remote-service/alerting-profile/CDremote-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDremote-service-INT.EMEA-PreProd: +- name: CD_remote-service INT +- alertingProfile: CD_remote-service/alerting-profile/CDremote-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDremote-service-INT.NA-PreProd: +- name: CD_remote-service INT +- alertingProfile: CD_remote-service/alerting-profile/CDremote-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDremote-service-INT.CN-PreProd: +- name: CD_remote-service INT +- alertingProfile: CD_remote-service/alerting-profile/CDremote-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_remote-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_remote-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_remote-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..8155ad90 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- remote-service: default.json + +remote-service: +- name: CD_remote-service - +- mzName: CD_remote-service/management-zone/CDremote-service.name +- mzId: CD_remote-service/management-zone/CDremote-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-software-upgrade/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_remote-software-upgrade/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..39815ad8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-software-upgrade/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDremote-software-upgrade-PROD: default.json +- CDremote-software-upgrade-E2E: default.json +- CDremote-software-upgrade-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDremote-software-upgrade-PROD: +- name: CD_remote-software-upgrade PROD +- tag: remote-software-upgrade +- mzId: CD_remote-software-upgrade/management-zone/CDremote-software-upgrade.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDremote-software-upgrade-PROD.EMEA-Prod: +- name: CD_remote-software-upgrade PROD +- tag: remote-software-upgrade +- mzId: CD_remote-software-upgrade/management-zone/CDremote-software-upgrade.id +- env: PROD +- skipDeployment: "false" +CDremote-software-upgrade-PROD.NA-Prod: +- name: CD_remote-software-upgrade PROD +- tag: remote-software-upgrade +- mzId: CD_remote-software-upgrade/management-zone/CDremote-software-upgrade.id +- env: PROD +- skipDeployment: "false" +CDremote-software-upgrade-PROD.CN-Prod: +- name: CD_remote-software-upgrade PROD +- tag: remote-software-upgrade +- mzId: CD_remote-software-upgrade/management-zone/CDremote-software-upgrade.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDremote-software-upgrade-E2E: +- name: CD_remote-software-upgrade E2E +- tag: remote-software-upgrade +- mzId: CD_remote-software-upgrade/management-zone/CDremote-software-upgrade.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDremote-software-upgrade-E2E.EMEA-Prod: +- name: CD_remote-software-upgrade E2E +- tag: remote-software-upgrade +- mzId: CD_remote-software-upgrade/management-zone/CDremote-software-upgrade.id +- env: E2E +- skipDeployment: "false" +CDremote-software-upgrade-E2E.NA-Prod: +- name: CD_remote-software-upgrade E2E +- tag: remote-software-upgrade +- mzId: CD_remote-software-upgrade/management-zone/CDremote-software-upgrade.id +- env: E2E +- skipDeployment: "false" +CDremote-software-upgrade-E2E.CN-Prod: +- name: CD_remote-software-upgrade E2E +- tag: remote-software-upgrade +- mzId: CD_remote-software-upgrade/management-zone/CDremote-software-upgrade.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDremote-software-upgrade-INT: +- name: CD_remote-software-upgrade INT +- tag: remote-software-upgrade +- mzId: CD_remote-software-upgrade/management-zone/CDremote-software-upgrade.id +- env: INT +- skipDeployment: "true" +#Configuration +CDremote-software-upgrade-INT.EMEA-PreProd: +- name: CD_remote-software-upgrade INT +- tag: remote-software-upgrade +- mzId: CD_remote-software-upgrade/management-zone/CDremote-software-upgrade.id +- env: INT +- skipDeployment: "false" +CDremote-software-upgrade-INT.NA-PreProd: +- name: CD_remote-software-upgrade INT +- tag: remote-software-upgrade +- mzId: CD_remote-software-upgrade/management-zone/CDremote-software-upgrade.id +- env: INT +- skipDeployment: "false" +CDremote-software-upgrade-INT.CN-PreProd: +- name: CD_remote-software-upgrade INT +- tag: remote-software-upgrade +- mzId: CD_remote-software-upgrade/management-zone/CDremote-software-upgrade.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-software-upgrade/alerting-profile/default.json b/BMW-Dynatrace-config/CD_remote-software-upgrade/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-software-upgrade/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-software-upgrade/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_remote-software-upgrade/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-software-upgrade/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-software-upgrade/custom-service-java/README.md b/BMW-Dynatrace-config/CD_remote-software-upgrade/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-software-upgrade/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-software-upgrade/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_remote-software-upgrade/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-software-upgrade/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-software-upgrade/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_remote-software-upgrade/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-software-upgrade/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-software-upgrade/dashboard/README.md b/BMW-Dynatrace-config/CD_remote-software-upgrade/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-software-upgrade/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-software-upgrade/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_remote-software-upgrade/dashboard/dashboard.yaml new file mode 100644 index 00000000..63ace3b9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-software-upgrade/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDremote-software-upgrade-PROD-E2E: defaultPRODE2E.json +- CDremote-software-upgrade-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDremote-software-upgrade-PROD-E2E: +- name: CD_remote-software-upgrade PROD +- mzName: CD_remote-software-upgrade/management-zone/CDremote-software-upgrade.name +- mzId: CD_remote-software-upgrade/management-zone/CDremote-software-upgrade.id +- skipDeployment: "true" +#Configuration +CDremote-software-upgrade-PROD-E2E.EMEA-Prod: +- name: CD_remote-software-upgrade PROD +- mzName: CD_remote-software-upgrade/management-zone/CDremote-software-upgrade.name +- mzId: CD_remote-software-upgrade/management-zone/CDremote-software-upgrade.id +- tag: remote-software-upgrade +- skipDeployment: "false" +CDremote-software-upgrade-PROD-E2E.NA-Prod: +- name: CD_remote-software-upgrade PROD +- mzName: CD_remote-software-upgrade/management-zone/CDremote-software-upgrade.name +- mzId: CD_remote-software-upgrade/management-zone/CDremote-software-upgrade.id +- tag: remote-software-upgrade +- skipDeployment: "false" +CDremote-software-upgrade-PROD-E2E.CN-Prod: +- name: CD_remote-software-upgrade PROD +- mzName: CD_remote-software-upgrade/management-zone/CDremote-software-upgrade.name +- mzId: CD_remote-software-upgrade/management-zone/CDremote-software-upgrade.id +- tag: remote-software-upgrade +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDremote-software-upgrade-INT-TEST: +- name: CD_remote-software-upgrade INT-TEST +- mzName: CD_remote-software-upgrade/management-zone/CDremote-software-upgrade.name +- mzId: CD_remote-software-upgrade/management-zone/CDremote-software-upgrade.id +- tag: remote-software-upgrade +- skipDeployment: "true" +#Configuration +CDremote-software-upgrade-INT-TEST.EMEA-PreProd: +- name: CD_remote-software-upgrade INT-TEST +- mzName: CD_remote-software-upgrade/management-zone/CDremote-software-upgrade.name +- mzId: CD_remote-software-upgrade/management-zone/CDremote-software-upgrade.id +- tag: remote-software-upgrade +- skipDeployment: "false" +CDremote-software-upgrade-INT-TEST.NA-PreProd: +- name: CD_remote-software-upgrade INT-TEST +- mzName: CD_remote-software-upgrade/management-zone/CDremote-software-upgrade.name +- mzId: CD_remote-software-upgrade/management-zone/CDremote-software-upgrade.id +- env: INT +- skipDeployment: "false" +CDremote-software-upgrade-INT-TEST.CN-PreProd: +- name: CD_remote-software-upgrade INT-TEST +- mzName: CD_remote-software-upgrade/management-zone/CDremote-software-upgrade.name +- mzId: CD_remote-software-upgrade/management-zone/CDremote-software-upgrade.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-software-upgrade/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_remote-software-upgrade/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-software-upgrade/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-software-upgrade/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_remote-software-upgrade/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-software-upgrade/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-software-upgrade/management-zone/README.md b/BMW-Dynatrace-config/CD_remote-software-upgrade/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-software-upgrade/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_remote-software-upgrade/management-zone/default.json b/BMW-Dynatrace-config/CD_remote-software-upgrade/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-software-upgrade/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-software-upgrade/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_remote-software-upgrade/management-zone/management-zone.yaml new file mode 100644 index 00000000..f107c84b --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-software-upgrade/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDremote-software-upgrade: default.json + +CDremote-software-upgrade: +- name: CD_remote-software-upgrade +- tag: remote-software-upgrade diff --git a/BMW-Dynatrace-config/CD_remote-software-upgrade/notification/README.md b/BMW-Dynatrace-config/CD_remote-software-upgrade/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-software-upgrade/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-software-upgrade/notification/email.json b/BMW-Dynatrace-config/CD_remote-software-upgrade/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-software-upgrade/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-software-upgrade/notification/msTeams.json b/BMW-Dynatrace-config/CD_remote-software-upgrade/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-software-upgrade/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-software-upgrade/notification/notification.yaml b/BMW-Dynatrace-config/CD_remote-software-upgrade/notification/notification.yaml new file mode 100644 index 00000000..3474bb54 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-software-upgrade/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDremote-software-upgrade-PROD: msTeams.json +- CDremote-software-upgrade-E2E: msTeams.json +- CDremote-software-upgrade-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDremote-software-upgrade-PROD: +- name: CD_remote-software-upgrade PROD +- alertingProfile: CD_remote-software-upgrade/alerting-profile/CDremote-software-upgrade-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDremote-software-upgrade-PROD.EMEA-Prod: +- name: CD_remote-software-upgrade PROD +- alertingProfile: CD_remote-software-upgrade/alerting-profile/CDremote-software-upgrade-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDremote-software-upgrade-PROD.NA-Prod: +- name: CD_remote-software-upgrade PROD +- alertingProfile: CD_remote-software-upgrade/alerting-profile/CDremote-software-upgrade-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDremote-software-upgrade-PROD.CN-Prod: +- name: CD_remote-software-upgrade PROD +- alertingProfile: CD_remote-software-upgrade/alerting-profile/CDremote-software-upgrade-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDremote-software-upgrade-E2E: +- name: CD_remote-software-upgrade E2E +- alertingProfile: CD_remote-software-upgrade/alerting-profile/CDremote-software-upgrade-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDremote-software-upgrade-E2E.EMEA-Prod: +- name: CD_remote-software-upgrade E2E +- alertingProfile: CD_remote-software-upgrade/alerting-profile/CDremote-software-upgrade-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDremote-software-upgrade-E2E.NA-Prod: +- name: CD_remote-software-upgrade E2E +- alertingProfile: CD_remote-software-upgrade/alerting-profile/CDremote-software-upgrade-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDremote-software-upgrade-E2E.CN-Prod: +- name: CD_remote-software-upgrade E2E +- alertingProfile: CD_remote-software-upgrade/alerting-profile/CDremote-software-upgrade-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDremote-software-upgrade-INT: +- name: CD_remote-software-upgrade INT +- alertingProfile: CD_remote-software-upgrade/alerting-profile/CDremote-software-upgrade-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDremote-software-upgrade-INT.EMEA-PreProd: +- name: CD_remote-software-upgrade INT +- alertingProfile: CD_remote-software-upgrade/alerting-profile/CDremote-software-upgrade-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDremote-software-upgrade-INT.NA-PreProd: +- name: CD_remote-software-upgrade INT +- alertingProfile: CD_remote-software-upgrade/alerting-profile/CDremote-software-upgrade-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDremote-software-upgrade-INT.CN-PreProd: +- name: CD_remote-software-upgrade INT +- alertingProfile: CD_remote-software-upgrade/alerting-profile/CDremote-software-upgrade-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-software-upgrade/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_remote-software-upgrade/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-software-upgrade/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-software-upgrade/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_remote-software-upgrade/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-software-upgrade/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-software-upgrade/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_remote-software-upgrade/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..1a9ec0a8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-software-upgrade/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- remote-software-upgrade: default.json + +remote-software-upgrade: +- name: CD_remote-software-upgrade - +- mzName: CD_remote-software-upgrade/management-zone/CDremote-software-upgrade.name +- mzId: CD_remote-software-upgrade/management-zone/CDremote-software-upgrade.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..f5e93e26 --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDroadside-assistance-composite-service-PROD: default.json +- CDroadside-assistance-composite-service-E2E: default.json +- CDroadside-assistance-composite-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDroadside-assistance-composite-service-PROD: +- name: CD_roadside-assistance-composite-service PROD +- tag: roadside-assistance-composite-service +- mzId: CD_roadside-assistance-composite-service/management-zone/CDroadside-assistance-composite-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDroadside-assistance-composite-service-PROD.EMEA-Prod: +- name: CD_roadside-assistance-composite-service PROD +- tag: roadside-assistance-composite-service +- mzId: CD_roadside-assistance-composite-service/management-zone/CDroadside-assistance-composite-service.id +- env: PROD +- skipDeployment: "false" +CDroadside-assistance-composite-service-PROD.NA-Prod: +- name: CD_roadside-assistance-composite-service PROD +- tag: roadside-assistance-composite-service +- mzId: CD_roadside-assistance-composite-service/management-zone/CDroadside-assistance-composite-service.id +- env: PROD +- skipDeployment: "false" +CDroadside-assistance-composite-service-PROD.CN-Prod: +- name: CD_roadside-assistance-composite-service PROD +- tag: roadside-assistance-composite-service +- mzId: CD_roadside-assistance-composite-service/management-zone/CDroadside-assistance-composite-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDroadside-assistance-composite-service-E2E: +- name: CD_roadside-assistance-composite-service E2E +- tag: roadside-assistance-composite-service +- mzId: CD_roadside-assistance-composite-service/management-zone/CDroadside-assistance-composite-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDroadside-assistance-composite-service-E2E.EMEA-Prod: +- name: CD_roadside-assistance-composite-service E2E +- tag: roadside-assistance-composite-service +- mzId: CD_roadside-assistance-composite-service/management-zone/CDroadside-assistance-composite-service.id +- env: E2E +- skipDeployment: "false" +CDroadside-assistance-composite-service-E2E.NA-Prod: +- name: CD_roadside-assistance-composite-service E2E +- tag: roadside-assistance-composite-service +- mzId: CD_roadside-assistance-composite-service/management-zone/CDroadside-assistance-composite-service.id +- env: E2E +- skipDeployment: "false" +CDroadside-assistance-composite-service-E2E.CN-Prod: +- name: CD_roadside-assistance-composite-service E2E +- tag: roadside-assistance-composite-service +- mzId: CD_roadside-assistance-composite-service/management-zone/CDroadside-assistance-composite-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDroadside-assistance-composite-service-INT: +- name: CD_roadside-assistance-composite-service INT +- tag: roadside-assistance-composite-service +- mzId: CD_roadside-assistance-composite-service/management-zone/CDroadside-assistance-composite-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDroadside-assistance-composite-service-INT.EMEA-PreProd: +- name: CD_roadside-assistance-composite-service INT +- tag: roadside-assistance-composite-service +- mzId: CD_roadside-assistance-composite-service/management-zone/CDroadside-assistance-composite-service.id +- env: INT +- skipDeployment: "false" +CDroadside-assistance-composite-service-INT.NA-PreProd: +- name: CD_roadside-assistance-composite-service INT +- tag: roadside-assistance-composite-service +- mzId: CD_roadside-assistance-composite-service/management-zone/CDroadside-assistance-composite-service.id +- env: INT +- skipDeployment: "false" +CDroadside-assistance-composite-service-INT.CN-PreProd: +- name: CD_roadside-assistance-composite-service INT +- tag: roadside-assistance-composite-service +- mzId: CD_roadside-assistance-composite-service/management-zone/CDroadside-assistance-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/dashboard/README.md b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..2ed92a94 --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDroadside-assistance-composite-service-PROD-E2E: defaultPRODE2E.json +- CDroadside-assistance-composite-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDroadside-assistance-composite-service-PROD-E2E: +- name: CD_roadside-assistance-composite-service PROD +- mzName: CD_roadside-assistance-composite-service/management-zone/CDroadside-assistance-composite-service.name +- mzId: CD_roadside-assistance-composite-service/management-zone/CDroadside-assistance-composite-service.id +- skipDeployment: "true" +#Configuration +CDroadside-assistance-composite-service-PROD-E2E.EMEA-Prod: +- name: CD_roadside-assistance-composite-service PROD +- mzName: CD_roadside-assistance-composite-service/management-zone/CDroadside-assistance-composite-service.name +- mzId: CD_roadside-assistance-composite-service/management-zone/CDroadside-assistance-composite-service.id +- tag: roadside-assistance-composite-service +- skipDeployment: "false" +CDroadside-assistance-composite-service-PROD-E2E.NA-Prod: +- name: CD_roadside-assistance-composite-service PROD +- mzName: CD_roadside-assistance-composite-service/management-zone/CDroadside-assistance-composite-service.name +- mzId: CD_roadside-assistance-composite-service/management-zone/CDroadside-assistance-composite-service.id +- tag: roadside-assistance-composite-service +- skipDeployment: "false" +CDroadside-assistance-composite-service-PROD-E2E.CN-Prod: +- name: CD_roadside-assistance-composite-service PROD +- mzName: CD_roadside-assistance-composite-service/management-zone/CDroadside-assistance-composite-service.name +- mzId: CD_roadside-assistance-composite-service/management-zone/CDroadside-assistance-composite-service.id +- tag: roadside-assistance-composite-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDroadside-assistance-composite-service-INT-TEST: +- name: CD_roadside-assistance-composite-service INT-TEST +- mzName: CD_roadside-assistance-composite-service/management-zone/CDroadside-assistance-composite-service.name +- mzId: CD_roadside-assistance-composite-service/management-zone/CDroadside-assistance-composite-service.id +- tag: roadside-assistance-composite-service +- skipDeployment: "true" +#Configuration +CDroadside-assistance-composite-service-INT-TEST.EMEA-PreProd: +- name: CD_roadside-assistance-composite-service INT-TEST +- mzName: CD_roadside-assistance-composite-service/management-zone/CDroadside-assistance-composite-service.name +- mzId: CD_roadside-assistance-composite-service/management-zone/CDroadside-assistance-composite-service.id +- tag: roadside-assistance-composite-service +- skipDeployment: "false" +CDroadside-assistance-composite-service-INT-TEST.NA-PreProd: +- name: CD_roadside-assistance-composite-service INT-TEST +- mzName: CD_roadside-assistance-composite-service/management-zone/CDroadside-assistance-composite-service.name +- mzId: CD_roadside-assistance-composite-service/management-zone/CDroadside-assistance-composite-service.id +- env: INT +- skipDeployment: "false" +CDroadside-assistance-composite-service-INT-TEST.CN-PreProd: +- name: CD_roadside-assistance-composite-service INT-TEST +- mzName: CD_roadside-assistance-composite-service/management-zone/CDroadside-assistance-composite-service.name +- mzId: CD_roadside-assistance-composite-service/management-zone/CDroadside-assistance-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/management-zone/README.md b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/management-zone/default.json b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..8aafc394 --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDroadside-assistance-composite-service: default.json + +CDroadside-assistance-composite-service: +- name: CD_roadside-assistance-composite-service +- tag: roadside-assistance-composite-service diff --git a/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/notification/README.md b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/notification/email.json b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/notification/notification.yaml new file mode 100644 index 00000000..025d82ad --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDroadside-assistance-composite-service-PROD: msTeams.json +- CDroadside-assistance-composite-service-E2E: msTeams.json +- CDroadside-assistance-composite-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDroadside-assistance-composite-service-PROD: +- name: CD_roadside-assistance-composite-service PROD +- alertingProfile: CD_roadside-assistance-composite-service/alerting-profile/CDroadside-assistance-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDroadside-assistance-composite-service-PROD.EMEA-Prod: +- name: CD_roadside-assistance-composite-service PROD +- alertingProfile: CD_roadside-assistance-composite-service/alerting-profile/CDroadside-assistance-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDroadside-assistance-composite-service-PROD.NA-Prod: +- name: CD_roadside-assistance-composite-service PROD +- alertingProfile: CD_roadside-assistance-composite-service/alerting-profile/CDroadside-assistance-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDroadside-assistance-composite-service-PROD.CN-Prod: +- name: CD_roadside-assistance-composite-service PROD +- alertingProfile: CD_roadside-assistance-composite-service/alerting-profile/CDroadside-assistance-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDroadside-assistance-composite-service-E2E: +- name: CD_roadside-assistance-composite-service E2E +- alertingProfile: CD_roadside-assistance-composite-service/alerting-profile/CDroadside-assistance-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDroadside-assistance-composite-service-E2E.EMEA-Prod: +- name: CD_roadside-assistance-composite-service E2E +- alertingProfile: CD_roadside-assistance-composite-service/alerting-profile/CDroadside-assistance-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDroadside-assistance-composite-service-E2E.NA-Prod: +- name: CD_roadside-assistance-composite-service E2E +- alertingProfile: CD_roadside-assistance-composite-service/alerting-profile/CDroadside-assistance-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDroadside-assistance-composite-service-E2E.CN-Prod: +- name: CD_roadside-assistance-composite-service E2E +- alertingProfile: CD_roadside-assistance-composite-service/alerting-profile/CDroadside-assistance-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDroadside-assistance-composite-service-INT: +- name: CD_roadside-assistance-composite-service INT +- alertingProfile: CD_roadside-assistance-composite-service/alerting-profile/CDroadside-assistance-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDroadside-assistance-composite-service-INT.EMEA-PreProd: +- name: CD_roadside-assistance-composite-service INT +- alertingProfile: CD_roadside-assistance-composite-service/alerting-profile/CDroadside-assistance-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDroadside-assistance-composite-service-INT.NA-PreProd: +- name: CD_roadside-assistance-composite-service INT +- alertingProfile: CD_roadside-assistance-composite-service/alerting-profile/CDroadside-assistance-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDroadside-assistance-composite-service-INT.CN-PreProd: +- name: CD_roadside-assistance-composite-service INT +- alertingProfile: CD_roadside-assistance-composite-service/alerting-profile/CDroadside-assistance-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..1ca66a8b --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- roadside-assistance-composite-service: default.json + +roadside-assistance-composite-service: +- name: CD_roadside-assistance-composite-service - +- mzName: CD_roadside-assistance-composite-service/management-zone/CDroadside-assistance-composite-service.name +- mzId: CD_roadside-assistance-composite-service/management-zone/CDroadside-assistance-composite-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_roadside-assistance/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..b66cf711 --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDroadside-assistance-PROD: default.json +- CDroadside-assistance-E2E: default.json +- CDroadside-assistance-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDroadside-assistance-PROD: +- name: CD_roadside-assistance PROD +- tag: roadside-assistance +- mzId: CD_roadside-assistance/management-zone/CDroadside-assistance.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDroadside-assistance-PROD.EMEA-Prod: +- name: CD_roadside-assistance PROD +- tag: roadside-assistance +- mzId: CD_roadside-assistance/management-zone/CDroadside-assistance.id +- env: PROD +- skipDeployment: "false" +CDroadside-assistance-PROD.NA-Prod: +- name: CD_roadside-assistance PROD +- tag: roadside-assistance +- mzId: CD_roadside-assistance/management-zone/CDroadside-assistance.id +- env: PROD +- skipDeployment: "false" +CDroadside-assistance-PROD.CN-Prod: +- name: CD_roadside-assistance PROD +- tag: roadside-assistance +- mzId: CD_roadside-assistance/management-zone/CDroadside-assistance.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDroadside-assistance-E2E: +- name: CD_roadside-assistance E2E +- tag: roadside-assistance +- mzId: CD_roadside-assistance/management-zone/CDroadside-assistance.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDroadside-assistance-E2E.EMEA-Prod: +- name: CD_roadside-assistance E2E +- tag: roadside-assistance +- mzId: CD_roadside-assistance/management-zone/CDroadside-assistance.id +- env: E2E +- skipDeployment: "false" +CDroadside-assistance-E2E.NA-Prod: +- name: CD_roadside-assistance E2E +- tag: roadside-assistance +- mzId: CD_roadside-assistance/management-zone/CDroadside-assistance.id +- env: E2E +- skipDeployment: "false" +CDroadside-assistance-E2E.CN-Prod: +- name: CD_roadside-assistance E2E +- tag: roadside-assistance +- mzId: CD_roadside-assistance/management-zone/CDroadside-assistance.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDroadside-assistance-INT: +- name: CD_roadside-assistance INT +- tag: roadside-assistance +- mzId: CD_roadside-assistance/management-zone/CDroadside-assistance.id +- env: INT +- skipDeployment: "true" +#Configuration +CDroadside-assistance-INT.EMEA-PreProd: +- name: CD_roadside-assistance INT +- tag: roadside-assistance +- mzId: CD_roadside-assistance/management-zone/CDroadside-assistance.id +- env: INT +- skipDeployment: "false" +CDroadside-assistance-INT.NA-PreProd: +- name: CD_roadside-assistance INT +- tag: roadside-assistance +- mzId: CD_roadside-assistance/management-zone/CDroadside-assistance.id +- env: INT +- skipDeployment: "false" +CDroadside-assistance-INT.CN-PreProd: +- name: CD_roadside-assistance INT +- tag: roadside-assistance +- mzId: CD_roadside-assistance/management-zone/CDroadside-assistance.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance/alerting-profile/default.json b/BMW-Dynatrace-config/CD_roadside-assistance/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_roadside-assistance/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance/custom-service-java/README.md b/BMW-Dynatrace-config/CD_roadside-assistance/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_roadside-assistance/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_roadside-assistance/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance/dashboard/README.md b/BMW-Dynatrace-config/CD_roadside-assistance/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_roadside-assistance/dashboard/dashboard.yaml new file mode 100644 index 00000000..72f68f7b --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDroadside-assistance-PROD-E2E: defaultPRODE2E.json +- CDroadside-assistance-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDroadside-assistance-PROD-E2E: +- name: CD_roadside-assistance PROD +- mzName: CD_roadside-assistance/management-zone/CDroadside-assistance.name +- mzId: CD_roadside-assistance/management-zone/CDroadside-assistance.id +- skipDeployment: "true" +#Configuration +CDroadside-assistance-PROD-E2E.EMEA-Prod: +- name: CD_roadside-assistance PROD +- mzName: CD_roadside-assistance/management-zone/CDroadside-assistance.name +- mzId: CD_roadside-assistance/management-zone/CDroadside-assistance.id +- tag: roadside-assistance +- skipDeployment: "false" +CDroadside-assistance-PROD-E2E.NA-Prod: +- name: CD_roadside-assistance PROD +- mzName: CD_roadside-assistance/management-zone/CDroadside-assistance.name +- mzId: CD_roadside-assistance/management-zone/CDroadside-assistance.id +- tag: roadside-assistance +- skipDeployment: "false" +CDroadside-assistance-PROD-E2E.CN-Prod: +- name: CD_roadside-assistance PROD +- mzName: CD_roadside-assistance/management-zone/CDroadside-assistance.name +- mzId: CD_roadside-assistance/management-zone/CDroadside-assistance.id +- tag: roadside-assistance +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDroadside-assistance-INT-TEST: +- name: CD_roadside-assistance INT-TEST +- mzName: CD_roadside-assistance/management-zone/CDroadside-assistance.name +- mzId: CD_roadside-assistance/management-zone/CDroadside-assistance.id +- tag: roadside-assistance +- skipDeployment: "true" +#Configuration +CDroadside-assistance-INT-TEST.EMEA-PreProd: +- name: CD_roadside-assistance INT-TEST +- mzName: CD_roadside-assistance/management-zone/CDroadside-assistance.name +- mzId: CD_roadside-assistance/management-zone/CDroadside-assistance.id +- tag: roadside-assistance +- skipDeployment: "false" +CDroadside-assistance-INT-TEST.NA-PreProd: +- name: CD_roadside-assistance INT-TEST +- mzName: CD_roadside-assistance/management-zone/CDroadside-assistance.name +- mzId: CD_roadside-assistance/management-zone/CDroadside-assistance.id +- env: INT +- skipDeployment: "false" +CDroadside-assistance-INT-TEST.CN-PreProd: +- name: CD_roadside-assistance INT-TEST +- mzName: CD_roadside-assistance/management-zone/CDroadside-assistance.name +- mzId: CD_roadside-assistance/management-zone/CDroadside-assistance.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_roadside-assistance/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_roadside-assistance/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance/management-zone/README.md b/BMW-Dynatrace-config/CD_roadside-assistance/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_roadside-assistance/management-zone/default.json b/BMW-Dynatrace-config/CD_roadside-assistance/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_roadside-assistance/management-zone/management-zone.yaml new file mode 100644 index 00000000..048938d3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDroadside-assistance: default.json + +CDroadside-assistance: +- name: CD_roadside-assistance +- tag: roadside-assistance diff --git a/BMW-Dynatrace-config/CD_roadside-assistance/notification/README.md b/BMW-Dynatrace-config/CD_roadside-assistance/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance/notification/email.json b/BMW-Dynatrace-config/CD_roadside-assistance/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance/notification/msTeams.json b/BMW-Dynatrace-config/CD_roadside-assistance/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance/notification/notification.yaml b/BMW-Dynatrace-config/CD_roadside-assistance/notification/notification.yaml new file mode 100644 index 00000000..7626a62d --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDroadside-assistance-PROD: msTeams.json +- CDroadside-assistance-E2E: msTeams.json +- CDroadside-assistance-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDroadside-assistance-PROD: +- name: CD_roadside-assistance PROD +- alertingProfile: CD_roadside-assistance/alerting-profile/CDroadside-assistance-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDroadside-assistance-PROD.EMEA-Prod: +- name: CD_roadside-assistance PROD +- alertingProfile: CD_roadside-assistance/alerting-profile/CDroadside-assistance-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDroadside-assistance-PROD.NA-Prod: +- name: CD_roadside-assistance PROD +- alertingProfile: CD_roadside-assistance/alerting-profile/CDroadside-assistance-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDroadside-assistance-PROD.CN-Prod: +- name: CD_roadside-assistance PROD +- alertingProfile: CD_roadside-assistance/alerting-profile/CDroadside-assistance-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDroadside-assistance-E2E: +- name: CD_roadside-assistance E2E +- alertingProfile: CD_roadside-assistance/alerting-profile/CDroadside-assistance-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDroadside-assistance-E2E.EMEA-Prod: +- name: CD_roadside-assistance E2E +- alertingProfile: CD_roadside-assistance/alerting-profile/CDroadside-assistance-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDroadside-assistance-E2E.NA-Prod: +- name: CD_roadside-assistance E2E +- alertingProfile: CD_roadside-assistance/alerting-profile/CDroadside-assistance-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDroadside-assistance-E2E.CN-Prod: +- name: CD_roadside-assistance E2E +- alertingProfile: CD_roadside-assistance/alerting-profile/CDroadside-assistance-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDroadside-assistance-INT: +- name: CD_roadside-assistance INT +- alertingProfile: CD_roadside-assistance/alerting-profile/CDroadside-assistance-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDroadside-assistance-INT.EMEA-PreProd: +- name: CD_roadside-assistance INT +- alertingProfile: CD_roadside-assistance/alerting-profile/CDroadside-assistance-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDroadside-assistance-INT.NA-PreProd: +- name: CD_roadside-assistance INT +- alertingProfile: CD_roadside-assistance/alerting-profile/CDroadside-assistance-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDroadside-assistance-INT.CN-PreProd: +- name: CD_roadside-assistance INT +- alertingProfile: CD_roadside-assistance/alerting-profile/CDroadside-assistance-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_roadside-assistance/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_roadside-assistance/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_roadside-assistance/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..55d02e0e --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- roadside-assistance: default.json + +roadside-assistance: +- name: CD_roadside-assistance - +- mzName: CD_roadside-assistance/management-zone/CDroadside-assistance.name +- mzId: CD_roadside-assistance/management-zone/CDroadside-assistance.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu-adapter/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_rsu-adapter/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..344f7561 --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu-adapter/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDrsu-adapter-PROD: default.json +- CDrsu-adapter-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDrsu-adapter-PROD: +- name: CD_rsu-adapter PROD +- tag: rsu-adapter +- mzId: CD_rsu-adapter/management-zone/CDrsu-adapter.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDrsu-adapter-PROD.EMEA-Prod: +- name: CD_rsu-adapter PROD +- tag: rsu-adapter +- mzId: CD_rsu-adapter/management-zone/CDrsu-adapter.id +- env: PROD +- skipDeployment: "false" +CDrsu-adapter-PROD.NA-Prod: +- name: CD_rsu-adapter PROD +- tag: rsu-adapter +- mzId: CD_rsu-adapter/management-zone/CDrsu-adapter.id +- env: PROD +- skipDeployment: "false" +CDrsu-adapter-PROD.CN-Prod: +- name: CD_rsu-adapter PROD +- tag: rsu-adapter +- mzId: CD_rsu-adapter/management-zone/CDrsu-adapter.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDrsu-adapter-INT: +- name: CD_rsu-adapter INT +- tag: rsu-adapter +- mzId: CD_rsu-adapter/management-zone/CDrsu-adapter.id +- env: INT +- skipDeployment: "true" +#Configuration +CDrsu-adapter-INT.EMEA-PreProd: +- name: CD_rsu-adapter INT +- tag: rsu-adapter +- mzId: CD_rsu-adapter/management-zone/CDrsu-adapter.id +- env: INT +- skipDeployment: "false" +CDrsu-adapter-INT.NA-PreProd: +- name: CD_rsu-adapter INT +- tag: rsu-adapter +- mzId: CD_rsu-adapter/management-zone/CDrsu-adapter.id +- env: INT +- skipDeployment: "false" +CDrsu-adapter-INT.CN-PreProd: +- name: CD_rsu-adapter INT +- tag: rsu-adapter +- mzId: CD_rsu-adapter/management-zone/CDrsu-adapter.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu-adapter/alerting-profile/default.json b/BMW-Dynatrace-config/CD_rsu-adapter/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu-adapter/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu-adapter/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_rsu-adapter/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu-adapter/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu-adapter/custom-service-java/README.md b/BMW-Dynatrace-config/CD_rsu-adapter/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu-adapter/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu-adapter/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_rsu-adapter/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu-adapter/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu-adapter/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_rsu-adapter/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu-adapter/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu-adapter/dashboard/README.md b/BMW-Dynatrace-config/CD_rsu-adapter/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu-adapter/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu-adapter/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_rsu-adapter/dashboard/dashboard.yaml new file mode 100644 index 00000000..56fb8e00 --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu-adapter/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDrsu-adapter-PROD-E2E: defaultPRODE2E.json +- CDrsu-adapter-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDrsu-adapter-PROD-E2E: +- name: CD_rsu-adapter PROD-E2E +- mzName: CD_rsu-adapter/management-zone/CDrsu-adapter.name +- mzId: CD_rsu-adapter/management-zone/CDrsu-adapter.id +- skipDeployment: "true" +#Configuration +CDrsu-adapter-PROD-E2E.EMEA-Prod: +- name: CD_rsu-adapter PROD-E2E +- mzName: CD_rsu-adapter/management-zone/CDrsu-adapter.name +- mzId: CD_rsu-adapter/management-zone/CDrsu-adapter.id +- tag: rsu-adapter +- skipDeployment: "false" +CDrsu-adapter-PROD-E2E.NA-Prod: +- name: CD_rsu-adapter PROD-E2E +- mzName: CD_rsu-adapter/management-zone/CDrsu-adapter.name +- mzId: CD_rsu-adapter/management-zone/CDrsu-adapter.id +- tag: rsu-adapter +- skipDeployment: "false" +CDrsu-adapter-PROD-E2E.CN-Prod: +- name: CD_rsu-adapter PROD-E2E +- mzName: CD_rsu-adapter/management-zone/CDrsu-adapter.name +- mzId: CD_rsu-adapter/management-zone/CDrsu-adapter.id +- tag: rsu-adapter +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDrsu-adapter-INT-TEST: +- name: CD_rsu-adapter INT-TEST +- mzName: CD_rsu-adapter/management-zone/CDrsu-adapter.name +- mzId: CD_rsu-adapter/management-zone/CDrsu-adapter.id +- tag: rsu-adapter +- skipDeployment: "true" +#Configuration +CDrsu-adapter-INT-TEST.EMEA-PreProd: +- name: CD_rsu-adapter INT-TEST +- mzName: CD_rsu-adapter/management-zone/CDrsu-adapter.name +- mzId: CD_rsu-adapter/management-zone/CDrsu-adapter.id +- tag: rsu-adapter +- skipDeployment: "false" +CDrsu-adapter-INT-TEST.NA-PreProd: +- name: CD_rsu-adapter INT-TEST +- mzName: CD_rsu-adapter/management-zone/CDrsu-adapter.name +- mzId: CD_rsu-adapter/management-zone/CDrsu-adapter.id +- env: INT +- skipDeployment: "false" +CDrsu-adapter-INT-TEST.CN-PreProd: +- name: CD_rsu-adapter INT-TEST +- mzName: CD_rsu-adapter/management-zone/CDrsu-adapter.name +- mzId: CD_rsu-adapter/management-zone/CDrsu-adapter.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu-adapter/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_rsu-adapter/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu-adapter/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu-adapter/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_rsu-adapter/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu-adapter/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu-adapter/management-zone/README.md b/BMW-Dynatrace-config/CD_rsu-adapter/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu-adapter/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_rsu-adapter/management-zone/default.json b/BMW-Dynatrace-config/CD_rsu-adapter/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu-adapter/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu-adapter/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_rsu-adapter/management-zone/management-zone.yaml new file mode 100644 index 00000000..1e1ed02c --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu-adapter/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDrsu-adapter: default.json + +CDrsu-adapter: +- name: CD_rsu-adapter +- tag: rsu-adapter diff --git a/BMW-Dynatrace-config/CD_rsu-adapter/notification/README.md b/BMW-Dynatrace-config/CD_rsu-adapter/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu-adapter/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu-adapter/notification/email.json b/BMW-Dynatrace-config/CD_rsu-adapter/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu-adapter/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu-adapter/notification/msTeams.json b/BMW-Dynatrace-config/CD_rsu-adapter/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu-adapter/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu-adapter/notification/notification.yaml b/BMW-Dynatrace-config/CD_rsu-adapter/notification/notification.yaml new file mode 100644 index 00000000..43cfb6f5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu-adapter/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDrsu-adapter-PROD: msTeams.json +- CDrsu-adapter-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDrsu-adapter-PROD: +- name: CD_rsu-adapter PROD +- alertingProfile: CD_rsu-adapter/alerting-profile/CDrsu-adapter-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDrsu-adapter-PROD.EMEA-Prod: +- name: CD_rsu-adapter PROD +- alertingProfile: CD_rsu-adapter/alerting-profile/CDrsu-adapter-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDrsu-adapter-PROD.NA-Prod: +- name: CD_rsu-adapter PROD +- alertingProfile: CD_rsu-adapter/alerting-profile/CDrsu-adapter-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDrsu-adapter-PROD.CN-Prod: +- name: CD_rsu-adapter PROD +- alertingProfile: CD_rsu-adapter/alerting-profile/CDrsu-adapter-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDrsu-adapter-INT: +- name: CD_rsu-adapter INT +- alertingProfile: CD_rsu-adapter/alerting-profile/CDrsu-adapter-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDrsu-adapter-INT.EMEA-PreProd: +- name: CD_rsu-adapter INT +- alertingProfile: CD_rsu-adapter/alerting-profile/CDrsu-adapter-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDrsu-adapter-INT.NA-PreProd: +- name: CD_rsu-adapter INT +- alertingProfile: CD_rsu-adapter/alerting-profile/CDrsu-adapter-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDrsu-adapter-INT.CN-PreProd: +- name: CD_rsu-adapter INT +- alertingProfile: CD_rsu-adapter/alerting-profile/CDrsu-adapter-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu-adapter/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_rsu-adapter/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu-adapter/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu-adapter/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_rsu-adapter/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu-adapter/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu-adapter/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_rsu-adapter/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..67137ffe --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu-adapter/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- rsu-adapter: default.json + +rsu-adapter: +- name: CD_rsu-adapter - +- mzName: CD_rsu-adapter/management-zone/CDrsu-adapter.name +- mzId: CD_rsu-adapter/management-zone/CDrsu-adapter.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_rsu/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..bb793994 --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDrsu-PROD: default.json +- CDrsu-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDrsu-PROD: +- name: CD_rsu PROD +- tag: rsu +- mzId: CD_rsu/management-zone/CDrsu.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDrsu-PROD.EMEA-Prod: +- name: CD_rsu PROD +- tag: rsu +- mzId: CD_rsu/management-zone/CDrsu.id +- env: PROD +- skipDeployment: "false" +CDrsu-PROD.NA-Prod: +- name: CD_rsu PROD +- tag: rsu +- mzId: CD_rsu/management-zone/CDrsu.id +- env: PROD +- skipDeployment: "false" +CDrsu-PROD.CN-Prod: +- name: CD_rsu PROD +- tag: rsu +- mzId: CD_rsu/management-zone/CDrsu.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDrsu-INT: +- name: CD_rsu INT +- tag: rsu +- mzId: CD_rsu/management-zone/CDrsu.id +- env: INT +- skipDeployment: "true" +#Configuration +CDrsu-INT.EMEA-PreProd: +- name: CD_rsu INT +- tag: rsu +- mzId: CD_rsu/management-zone/CDrsu.id +- env: INT +- skipDeployment: "false" +CDrsu-INT.NA-PreProd: +- name: CD_rsu INT +- tag: rsu +- mzId: CD_rsu/management-zone/CDrsu.id +- env: INT +- skipDeployment: "false" +CDrsu-INT.CN-PreProd: +- name: CD_rsu INT +- tag: rsu +- mzId: CD_rsu/management-zone/CDrsu.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu/alerting-profile/default.json b/BMW-Dynatrace-config/CD_rsu/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_rsu/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu/custom-service-java/README.md b/BMW-Dynatrace-config/CD_rsu/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_rsu/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_rsu/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu/dashboard/README.md b/BMW-Dynatrace-config/CD_rsu/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_rsu/dashboard/dashboard.yaml new file mode 100644 index 00000000..e5417dc4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDrsu-PROD-E2E: defaultPRODE2E.json +- CDrsu-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDrsu-PROD-E2E: +- name: CD_rsu PROD-E2E +- mzName: CD_rsu/management-zone/CDrsu.name +- mzId: CD_rsu/management-zone/CDrsu.id +- skipDeployment: "true" +#Configuration +CDrsu-PROD-E2E.EMEA-Prod: +- name: CD_rsu PROD-E2E +- mzName: CD_rsu/management-zone/CDrsu.name +- mzId: CD_rsu/management-zone/CDrsu.id +- tag: rsu +- skipDeployment: "false" +CDrsu-PROD-E2E.NA-Prod: +- name: CD_rsu PROD-E2E +- mzName: CD_rsu/management-zone/CDrsu.name +- mzId: CD_rsu/management-zone/CDrsu.id +- tag: rsu +- skipDeployment: "false" +CDrsu-PROD-E2E.CN-Prod: +- name: CD_rsu PROD-E2E +- mzName: CD_rsu/management-zone/CDrsu.name +- mzId: CD_rsu/management-zone/CDrsu.id +- tag: rsu +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDrsu-INT-TEST: +- name: CD_rsu INT-TEST +- mzName: CD_rsu/management-zone/CDrsu.name +- mzId: CD_rsu/management-zone/CDrsu.id +- tag: rsu +- skipDeployment: "true" +#Configuration +CDrsu-INT-TEST.EMEA-PreProd: +- name: CD_rsu INT-TEST +- mzName: CD_rsu/management-zone/CDrsu.name +- mzId: CD_rsu/management-zone/CDrsu.id +- tag: rsu +- skipDeployment: "false" +CDrsu-INT-TEST.NA-PreProd: +- name: CD_rsu INT-TEST +- mzName: CD_rsu/management-zone/CDrsu.name +- mzId: CD_rsu/management-zone/CDrsu.id +- env: INT +- skipDeployment: "false" +CDrsu-INT-TEST.CN-PreProd: +- name: CD_rsu INT-TEST +- mzName: CD_rsu/management-zone/CDrsu.name +- mzId: CD_rsu/management-zone/CDrsu.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_rsu/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_rsu/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu/management-zone/README.md b/BMW-Dynatrace-config/CD_rsu/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_rsu/management-zone/default.json b/BMW-Dynatrace-config/CD_rsu/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_rsu/management-zone/management-zone.yaml new file mode 100644 index 00000000..ad2bd0f4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDrsu: default.json + +CDrsu: +- name: CD_rsu +- tag: rsu diff --git a/BMW-Dynatrace-config/CD_rsu/notification/README.md b/BMW-Dynatrace-config/CD_rsu/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu/notification/email.json b/BMW-Dynatrace-config/CD_rsu/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu/notification/msTeams.json b/BMW-Dynatrace-config/CD_rsu/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu/notification/notification.yaml b/BMW-Dynatrace-config/CD_rsu/notification/notification.yaml new file mode 100644 index 00000000..13c1faa2 --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDrsu-PROD: msTeams.json +- CDrsu-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDrsu-PROD: +- name: CD_rsu PROD +- alertingProfile: CD_rsu/alerting-profile/CDrsu-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDrsu-PROD.EMEA-Prod: +- name: CD_rsu PROD +- alertingProfile: CD_rsu/alerting-profile/CDrsu-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDrsu-PROD.NA-Prod: +- name: CD_rsu PROD +- alertingProfile: CD_rsu/alerting-profile/CDrsu-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDrsu-PROD.CN-Prod: +- name: CD_rsu PROD +- alertingProfile: CD_rsu/alerting-profile/CDrsu-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDrsu-INT: +- name: CD_rsu INT +- alertingProfile: CD_rsu/alerting-profile/CDrsu-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDrsu-INT.EMEA-PreProd: +- name: CD_rsu INT +- alertingProfile: CD_rsu/alerting-profile/CDrsu-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDrsu-INT.NA-PreProd: +- name: CD_rsu INT +- alertingProfile: CD_rsu/alerting-profile/CDrsu-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDrsu-INT.CN-PreProd: +- name: CD_rsu INT +- alertingProfile: CD_rsu/alerting-profile/CDrsu-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_rsu/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_rsu/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_rsu/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..ae4b35ed --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- rsu: default.json + +rsu: +- name: CD_rsu - +- mzName: CD_rsu/management-zone/CDrsu.name +- mzId: CD_rsu/management-zone/CDrsu.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sbr/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_sbr/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..52ac16dd --- /dev/null +++ b/BMW-Dynatrace-config/CD_sbr/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDsbr-PROD: default.json +- CDsbr-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDsbr-PROD: +- name: CD_sbr PROD +- tag: sbr +- mzId: CD_sbr/management-zone/CDsbr.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDsbr-PROD.EMEA-Prod: +- name: CD_sbr PROD +- tag: sbr +- mzId: CD_sbr/management-zone/CDsbr.id +- env: PROD +- skipDeployment: "false" +CDsbr-PROD.NA-Prod: +- name: CD_sbr PROD +- tag: sbr +- mzId: CD_sbr/management-zone/CDsbr.id +- env: PROD +- skipDeployment: "false" +CDsbr-PROD.CN-Prod: +- name: CD_sbr PROD +- tag: sbr +- mzId: CD_sbr/management-zone/CDsbr.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDsbr-INT: +- name: CD_sbr INT +- tag: sbr +- mzId: CD_sbr/management-zone/CDsbr.id +- env: INT +- skipDeployment: "true" +#Configuration +CDsbr-INT.EMEA-PreProd: +- name: CD_sbr INT +- tag: sbr +- mzId: CD_sbr/management-zone/CDsbr.id +- env: INT +- skipDeployment: "false" +CDsbr-INT.NA-PreProd: +- name: CD_sbr INT +- tag: sbr +- mzId: CD_sbr/management-zone/CDsbr.id +- env: INT +- skipDeployment: "false" +CDsbr-INT.CN-PreProd: +- name: CD_sbr INT +- tag: sbr +- mzId: CD_sbr/management-zone/CDsbr.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sbr/alerting-profile/default.json b/BMW-Dynatrace-config/CD_sbr/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sbr/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sbr/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_sbr/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_sbr/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sbr/custom-service-java/README.md b/BMW-Dynatrace-config/CD_sbr/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sbr/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sbr/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_sbr/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sbr/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sbr/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_sbr/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sbr/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sbr/dashboard/README.md b/BMW-Dynatrace-config/CD_sbr/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_sbr/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sbr/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_sbr/dashboard/dashboard.yaml new file mode 100644 index 00000000..c707f9e5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sbr/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDsbr-PROD-E2E: defaultPRODE2E.json +- CDsbr-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDsbr-PROD-E2E: +- name: CD_sbr PROD-E2E +- mzName: CD_sbr/management-zone/CDsbr.name +- mzId: CD_sbr/management-zone/CDsbr.id +- skipDeployment: "true" +#Configuration +CDsbr-PROD-E2E.EMEA-Prod: +- name: CD_sbr PROD-E2E +- mzName: CD_sbr/management-zone/CDsbr.name +- mzId: CD_sbr/management-zone/CDsbr.id +- tag: sbr +- skipDeployment: "false" +CDsbr-PROD-E2E.NA-Prod: +- name: CD_sbr PROD-E2E +- mzName: CD_sbr/management-zone/CDsbr.name +- mzId: CD_sbr/management-zone/CDsbr.id +- tag: sbr +- skipDeployment: "false" +CDsbr-PROD-E2E.CN-Prod: +- name: CD_sbr PROD-E2E +- mzName: CD_sbr/management-zone/CDsbr.name +- mzId: CD_sbr/management-zone/CDsbr.id +- tag: sbr +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDsbr-INT-TEST: +- name: CD_sbr INT-TEST +- mzName: CD_sbr/management-zone/CDsbr.name +- mzId: CD_sbr/management-zone/CDsbr.id +- tag: sbr +- skipDeployment: "true" +#Configuration +CDsbr-INT-TEST.EMEA-PreProd: +- name: CD_sbr INT-TEST +- mzName: CD_sbr/management-zone/CDsbr.name +- mzId: CD_sbr/management-zone/CDsbr.id +- tag: sbr +- skipDeployment: "false" +CDsbr-INT-TEST.NA-PreProd: +- name: CD_sbr INT-TEST +- mzName: CD_sbr/management-zone/CDsbr.name +- mzId: CD_sbr/management-zone/CDsbr.id +- env: INT +- skipDeployment: "false" +CDsbr-INT-TEST.CN-PreProd: +- name: CD_sbr INT-TEST +- mzName: CD_sbr/management-zone/CDsbr.name +- mzId: CD_sbr/management-zone/CDsbr.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sbr/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_sbr/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sbr/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sbr/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_sbr/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sbr/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sbr/management-zone/README.md b/BMW-Dynatrace-config/CD_sbr/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sbr/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_sbr/management-zone/default.json b/BMW-Dynatrace-config/CD_sbr/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_sbr/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sbr/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_sbr/management-zone/management-zone.yaml new file mode 100644 index 00000000..174de570 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sbr/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDsbr: default.json + +CDsbr: +- name: CD_sbr +- tag: sbr diff --git a/BMW-Dynatrace-config/CD_sbr/notification/README.md b/BMW-Dynatrace-config/CD_sbr/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sbr/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sbr/notification/email.json b/BMW-Dynatrace-config/CD_sbr/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sbr/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sbr/notification/msTeams.json b/BMW-Dynatrace-config/CD_sbr/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sbr/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sbr/notification/notification.yaml b/BMW-Dynatrace-config/CD_sbr/notification/notification.yaml new file mode 100644 index 00000000..a38dfc8b --- /dev/null +++ b/BMW-Dynatrace-config/CD_sbr/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDsbr-PROD: msTeams.json +- CDsbr-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDsbr-PROD: +- name: CD_sbr PROD +- alertingProfile: CD_sbr/alerting-profile/CDsbr-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDsbr-PROD.EMEA-Prod: +- name: CD_sbr PROD +- alertingProfile: CD_sbr/alerting-profile/CDsbr-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDsbr-PROD.NA-Prod: +- name: CD_sbr PROD +- alertingProfile: CD_sbr/alerting-profile/CDsbr-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDsbr-PROD.CN-Prod: +- name: CD_sbr PROD +- alertingProfile: CD_sbr/alerting-profile/CDsbr-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDsbr-INT: +- name: CD_sbr INT +- alertingProfile: CD_sbr/alerting-profile/CDsbr-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDsbr-INT.EMEA-PreProd: +- name: CD_sbr INT +- alertingProfile: CD_sbr/alerting-profile/CDsbr-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDsbr-INT.NA-PreProd: +- name: CD_sbr INT +- alertingProfile: CD_sbr/alerting-profile/CDsbr-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDsbr-INT.CN-PreProd: +- name: CD_sbr INT +- alertingProfile: CD_sbr/alerting-profile/CDsbr-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sbr/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_sbr/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_sbr/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sbr/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_sbr/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_sbr/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sbr/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_sbr/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..c27c6064 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sbr/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- sbr: default.json + +sbr: +- name: CD_sbr - +- mzName: CD_sbr/management-zone/CDsbr.name +- mzId: CD_sbr/management-zone/CDsbr.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scb/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_scb/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..7e01ed55 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scb/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDscb-PROD: default.json +- CDscb-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDscb-PROD: +- name: CD_scb PROD +- tag: scb +- mzId: CD_scb/management-zone/CDscb.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDscb-PROD.EMEA-Prod: +- name: CD_scb PROD +- tag: scb +- mzId: CD_scb/management-zone/CDscb.id +- env: PROD +- skipDeployment: "false" +CDscb-PROD.NA-Prod: +- name: CD_scb PROD +- tag: scb +- mzId: CD_scb/management-zone/CDscb.id +- env: PROD +- skipDeployment: "false" +CDscb-PROD.CN-Prod: +- name: CD_scb PROD +- tag: scb +- mzId: CD_scb/management-zone/CDscb.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDscb-INT: +- name: CD_scb INT +- tag: scb +- mzId: CD_scb/management-zone/CDscb.id +- env: INT +- skipDeployment: "true" +#Configuration +CDscb-INT.EMEA-PreProd: +- name: CD_scb INT +- tag: scb +- mzId: CD_scb/management-zone/CDscb.id +- env: INT +- skipDeployment: "false" +CDscb-INT.NA-PreProd: +- name: CD_scb INT +- tag: scb +- mzId: CD_scb/management-zone/CDscb.id +- env: INT +- skipDeployment: "false" +CDscb-INT.CN-PreProd: +- name: CD_scb INT +- tag: scb +- mzId: CD_scb/management-zone/CDscb.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scb/alerting-profile/default.json b/BMW-Dynatrace-config/CD_scb/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scb/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scb/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_scb/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_scb/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scb/custom-service-java/README.md b/BMW-Dynatrace-config/CD_scb/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scb/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scb/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_scb/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scb/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scb/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_scb/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scb/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scb/dashboard/README.md b/BMW-Dynatrace-config/CD_scb/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_scb/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scb/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_scb/dashboard/dashboard.yaml new file mode 100644 index 00000000..8d5a8c69 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scb/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDscb-PROD-E2E: defaultPRODE2E.json +- CDscb-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDscb-PROD-E2E: +- name: CD_scb PROD-E2E +- mzName: CD_scb/management-zone/CDscb.name +- mzId: CD_scb/management-zone/CDscb.id +- skipDeployment: "true" +#Configuration +CDscb-PROD-E2E.EMEA-Prod: +- name: CD_scb PROD-E2E +- mzName: CD_scb/management-zone/CDscb.name +- mzId: CD_scb/management-zone/CDscb.id +- tag: scb +- skipDeployment: "false" +CDscb-PROD-E2E.NA-Prod: +- name: CD_scb PROD-E2E +- mzName: CD_scb/management-zone/CDscb.name +- mzId: CD_scb/management-zone/CDscb.id +- tag: scb +- skipDeployment: "false" +CDscb-PROD-E2E.CN-Prod: +- name: CD_scb PROD-E2E +- mzName: CD_scb/management-zone/CDscb.name +- mzId: CD_scb/management-zone/CDscb.id +- tag: scb +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDscb-INT-TEST: +- name: CD_scb INT-TEST +- mzName: CD_scb/management-zone/CDscb.name +- mzId: CD_scb/management-zone/CDscb.id +- tag: scb +- skipDeployment: "true" +#Configuration +CDscb-INT-TEST.EMEA-PreProd: +- name: CD_scb INT-TEST +- mzName: CD_scb/management-zone/CDscb.name +- mzId: CD_scb/management-zone/CDscb.id +- tag: scb +- skipDeployment: "false" +CDscb-INT-TEST.NA-PreProd: +- name: CD_scb INT-TEST +- mzName: CD_scb/management-zone/CDscb.name +- mzId: CD_scb/management-zone/CDscb.id +- env: INT +- skipDeployment: "false" +CDscb-INT-TEST.CN-PreProd: +- name: CD_scb INT-TEST +- mzName: CD_scb/management-zone/CDscb.name +- mzId: CD_scb/management-zone/CDscb.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scb/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_scb/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scb/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scb/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_scb/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scb/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scb/management-zone/README.md b/BMW-Dynatrace-config/CD_scb/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scb/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_scb/management-zone/default.json b/BMW-Dynatrace-config/CD_scb/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_scb/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scb/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_scb/management-zone/management-zone.yaml new file mode 100644 index 00000000..ce0afdb5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scb/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDscb: default.json + +CDscb: +- name: CD_scb +- tag: scb diff --git a/BMW-Dynatrace-config/CD_scb/notification/README.md b/BMW-Dynatrace-config/CD_scb/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scb/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scb/notification/email.json b/BMW-Dynatrace-config/CD_scb/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scb/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scb/notification/msTeams.json b/BMW-Dynatrace-config/CD_scb/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scb/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scb/notification/notification.yaml b/BMW-Dynatrace-config/CD_scb/notification/notification.yaml new file mode 100644 index 00000000..636ae70f --- /dev/null +++ b/BMW-Dynatrace-config/CD_scb/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDscb-PROD: msTeams.json +- CDscb-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDscb-PROD: +- name: CD_scb PROD +- alertingProfile: CD_scb/alerting-profile/CDscb-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDscb-PROD.EMEA-Prod: +- name: CD_scb PROD +- alertingProfile: CD_scb/alerting-profile/CDscb-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDscb-PROD.NA-Prod: +- name: CD_scb PROD +- alertingProfile: CD_scb/alerting-profile/CDscb-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDscb-PROD.CN-Prod: +- name: CD_scb PROD +- alertingProfile: CD_scb/alerting-profile/CDscb-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDscb-INT: +- name: CD_scb INT +- alertingProfile: CD_scb/alerting-profile/CDscb-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDscb-INT.EMEA-PreProd: +- name: CD_scb INT +- alertingProfile: CD_scb/alerting-profile/CDscb-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDscb-INT.NA-PreProd: +- name: CD_scb INT +- alertingProfile: CD_scb/alerting-profile/CDscb-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDscb-INT.CN-PreProd: +- name: CD_scb INT +- alertingProfile: CD_scb/alerting-profile/CDscb-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scb/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_scb/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_scb/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scb/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_scb/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_scb/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scb/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_scb/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..a228baff --- /dev/null +++ b/BMW-Dynatrace-config/CD_scb/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- scb: default.json + +scb: +- name: CD_scb - +- mzName: CD_scb/management-zone/CDscb.name +- mzId: CD_scb/management-zone/CDscb.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scc/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_scc/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..435acd22 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scc/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDscc-PROD: default.json +- CDscc-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDscc-PROD: +- name: CD_scc PROD +- tag: scc +- mzId: CD_scc/management-zone/CDscc.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDscc-PROD.EMEA-Prod: +- name: CD_scc PROD +- tag: scc +- mzId: CD_scc/management-zone/CDscc.id +- env: PROD +- skipDeployment: "false" +CDscc-PROD.NA-Prod: +- name: CD_scc PROD +- tag: scc +- mzId: CD_scc/management-zone/CDscc.id +- env: PROD +- skipDeployment: "false" +CDscc-PROD.CN-Prod: +- name: CD_scc PROD +- tag: scc +- mzId: CD_scc/management-zone/CDscc.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDscc-INT: +- name: CD_scc INT +- tag: scc +- mzId: CD_scc/management-zone/CDscc.id +- env: INT +- skipDeployment: "true" +#Configuration +CDscc-INT.EMEA-PreProd: +- name: CD_scc INT +- tag: scc +- mzId: CD_scc/management-zone/CDscc.id +- env: INT +- skipDeployment: "false" +CDscc-INT.NA-PreProd: +- name: CD_scc INT +- tag: scc +- mzId: CD_scc/management-zone/CDscc.id +- env: INT +- skipDeployment: "false" +CDscc-INT.CN-PreProd: +- name: CD_scc INT +- tag: scc +- mzId: CD_scc/management-zone/CDscc.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scc/alerting-profile/default.json b/BMW-Dynatrace-config/CD_scc/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scc/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scc/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_scc/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_scc/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scc/custom-service-java/README.md b/BMW-Dynatrace-config/CD_scc/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scc/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scc/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_scc/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scc/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scc/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_scc/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scc/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scc/dashboard/README.md b/BMW-Dynatrace-config/CD_scc/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_scc/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scc/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_scc/dashboard/dashboard.yaml new file mode 100644 index 00000000..a32ea119 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scc/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDscc-PROD-E2E: defaultPRODE2E.json +- CDscc-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDscc-PROD-E2E: +- name: CD_scc PROD-E2E +- mzName: CD_scc/management-zone/CDscc.name +- mzId: CD_scc/management-zone/CDscc.id +- skipDeployment: "true" +#Configuration +CDscc-PROD-E2E.EMEA-Prod: +- name: CD_scc PROD-E2E +- mzName: CD_scc/management-zone/CDscc.name +- mzId: CD_scc/management-zone/CDscc.id +- tag: scc +- skipDeployment: "false" +CDscc-PROD-E2E.NA-Prod: +- name: CD_scc PROD-E2E +- mzName: CD_scc/management-zone/CDscc.name +- mzId: CD_scc/management-zone/CDscc.id +- tag: scc +- skipDeployment: "false" +CDscc-PROD-E2E.CN-Prod: +- name: CD_scc PROD-E2E +- mzName: CD_scc/management-zone/CDscc.name +- mzId: CD_scc/management-zone/CDscc.id +- tag: scc +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDscc-INT-TEST: +- name: CD_scc INT-TEST +- mzName: CD_scc/management-zone/CDscc.name +- mzId: CD_scc/management-zone/CDscc.id +- tag: scc +- skipDeployment: "true" +#Configuration +CDscc-INT-TEST.EMEA-PreProd: +- name: CD_scc INT-TEST +- mzName: CD_scc/management-zone/CDscc.name +- mzId: CD_scc/management-zone/CDscc.id +- tag: scc +- skipDeployment: "false" +CDscc-INT-TEST.NA-PreProd: +- name: CD_scc INT-TEST +- mzName: CD_scc/management-zone/CDscc.name +- mzId: CD_scc/management-zone/CDscc.id +- env: INT +- skipDeployment: "false" +CDscc-INT-TEST.CN-PreProd: +- name: CD_scc INT-TEST +- mzName: CD_scc/management-zone/CDscc.name +- mzId: CD_scc/management-zone/CDscc.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scc/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_scc/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scc/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scc/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_scc/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scc/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scc/management-zone/README.md b/BMW-Dynatrace-config/CD_scc/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scc/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_scc/management-zone/default.json b/BMW-Dynatrace-config/CD_scc/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_scc/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scc/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_scc/management-zone/management-zone.yaml new file mode 100644 index 00000000..ba9eecf7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scc/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDscc: default.json + +CDscc: +- name: CD_scc +- tag: scc diff --git a/BMW-Dynatrace-config/CD_scc/notification/README.md b/BMW-Dynatrace-config/CD_scc/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scc/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scc/notification/email.json b/BMW-Dynatrace-config/CD_scc/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scc/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scc/notification/msTeams.json b/BMW-Dynatrace-config/CD_scc/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scc/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scc/notification/notification.yaml b/BMW-Dynatrace-config/CD_scc/notification/notification.yaml new file mode 100644 index 00000000..905acca8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scc/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDscc-PROD: msTeams.json +- CDscc-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDscc-PROD: +- name: CD_scc PROD +- alertingProfile: CD_scc/alerting-profile/CDscc-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDscc-PROD.EMEA-Prod: +- name: CD_scc PROD +- alertingProfile: CD_scc/alerting-profile/CDscc-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDscc-PROD.NA-Prod: +- name: CD_scc PROD +- alertingProfile: CD_scc/alerting-profile/CDscc-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDscc-PROD.CN-Prod: +- name: CD_scc PROD +- alertingProfile: CD_scc/alerting-profile/CDscc-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDscc-INT: +- name: CD_scc INT +- alertingProfile: CD_scc/alerting-profile/CDscc-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDscc-INT.EMEA-PreProd: +- name: CD_scc INT +- alertingProfile: CD_scc/alerting-profile/CDscc-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDscc-INT.NA-PreProd: +- name: CD_scc INT +- alertingProfile: CD_scc/alerting-profile/CDscc-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDscc-INT.CN-PreProd: +- name: CD_scc INT +- alertingProfile: CD_scc/alerting-profile/CDscc-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scc/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_scc/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_scc/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scc/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_scc/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_scc/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scc/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_scc/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..041ed522 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scc/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- scc: default.json + +scc: +- name: CD_scc - +- mzName: CD_scc/management-zone/CDscc.name +- mzId: CD_scc/management-zone/CDscc.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-agentreg/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_scm-agentreg/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..73067b16 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-agentreg/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDscm-agentreg-PROD: default.json +- CDscm-agentreg-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDscm-agentreg-PROD: +- name: CD_scm-agentreg PROD +- tag: scm-agentreg +- mzId: CD_scm-agentreg/management-zone/CDscm-agentreg.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDscm-agentreg-PROD.EMEA-Prod: +- name: CD_scm-agentreg PROD +- tag: scm-agentreg +- mzId: CD_scm-agentreg/management-zone/CDscm-agentreg.id +- env: PROD +- skipDeployment: "false" +CDscm-agentreg-PROD.NA-Prod: +- name: CD_scm-agentreg PROD +- tag: scm-agentreg +- mzId: CD_scm-agentreg/management-zone/CDscm-agentreg.id +- env: PROD +- skipDeployment: "false" +CDscm-agentreg-PROD.CN-Prod: +- name: CD_scm-agentreg PROD +- tag: scm-agentreg +- mzId: CD_scm-agentreg/management-zone/CDscm-agentreg.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDscm-agentreg-INT: +- name: CD_scm-agentreg INT +- tag: scm-agentreg +- mzId: CD_scm-agentreg/management-zone/CDscm-agentreg.id +- env: INT +- skipDeployment: "true" +#Configuration +CDscm-agentreg-INT.EMEA-PreProd: +- name: CD_scm-agentreg INT +- tag: scm-agentreg +- mzId: CD_scm-agentreg/management-zone/CDscm-agentreg.id +- env: INT +- skipDeployment: "false" +CDscm-agentreg-INT.NA-PreProd: +- name: CD_scm-agentreg INT +- tag: scm-agentreg +- mzId: CD_scm-agentreg/management-zone/CDscm-agentreg.id +- env: INT +- skipDeployment: "false" +CDscm-agentreg-INT.CN-PreProd: +- name: CD_scm-agentreg INT +- tag: scm-agentreg +- mzId: CD_scm-agentreg/management-zone/CDscm-agentreg.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-agentreg/alerting-profile/default.json b/BMW-Dynatrace-config/CD_scm-agentreg/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-agentreg/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-agentreg/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_scm-agentreg/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-agentreg/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-agentreg/custom-service-java/README.md b/BMW-Dynatrace-config/CD_scm-agentreg/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-agentreg/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-agentreg/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_scm-agentreg/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-agentreg/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-agentreg/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_scm-agentreg/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-agentreg/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-agentreg/dashboard/README.md b/BMW-Dynatrace-config/CD_scm-agentreg/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-agentreg/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-agentreg/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_scm-agentreg/dashboard/dashboard.yaml new file mode 100644 index 00000000..e0fbd705 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-agentreg/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDscm-agentreg-PROD-E2E: defaultPRODE2E.json +- CDscm-agentreg-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDscm-agentreg-PROD-E2E: +- name: CD_scm-agentreg PROD-E2E +- mzName: CD_scm-agentreg/management-zone/CDscm-agentreg.name +- mzId: CD_scm-agentreg/management-zone/CDscm-agentreg.id +- skipDeployment: "true" +#Configuration +CDscm-agentreg-PROD-E2E.EMEA-Prod: +- name: CD_scm-agentreg PROD-E2E +- mzName: CD_scm-agentreg/management-zone/CDscm-agentreg.name +- mzId: CD_scm-agentreg/management-zone/CDscm-agentreg.id +- tag: scm-agentreg +- skipDeployment: "false" +CDscm-agentreg-PROD-E2E.NA-Prod: +- name: CD_scm-agentreg PROD-E2E +- mzName: CD_scm-agentreg/management-zone/CDscm-agentreg.name +- mzId: CD_scm-agentreg/management-zone/CDscm-agentreg.id +- tag: scm-agentreg +- skipDeployment: "false" +CDscm-agentreg-PROD-E2E.CN-Prod: +- name: CD_scm-agentreg PROD-E2E +- mzName: CD_scm-agentreg/management-zone/CDscm-agentreg.name +- mzId: CD_scm-agentreg/management-zone/CDscm-agentreg.id +- tag: scm-agentreg +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDscm-agentreg-INT-TEST: +- name: CD_scm-agentreg INT-TEST +- mzName: CD_scm-agentreg/management-zone/CDscm-agentreg.name +- mzId: CD_scm-agentreg/management-zone/CDscm-agentreg.id +- tag: scm-agentreg +- skipDeployment: "true" +#Configuration +CDscm-agentreg-INT-TEST.EMEA-PreProd: +- name: CD_scm-agentreg INT-TEST +- mzName: CD_scm-agentreg/management-zone/CDscm-agentreg.name +- mzId: CD_scm-agentreg/management-zone/CDscm-agentreg.id +- tag: scm-agentreg +- skipDeployment: "false" +CDscm-agentreg-INT-TEST.NA-PreProd: +- name: CD_scm-agentreg INT-TEST +- mzName: CD_scm-agentreg/management-zone/CDscm-agentreg.name +- mzId: CD_scm-agentreg/management-zone/CDscm-agentreg.id +- env: INT +- skipDeployment: "false" +CDscm-agentreg-INT-TEST.CN-PreProd: +- name: CD_scm-agentreg INT-TEST +- mzName: CD_scm-agentreg/management-zone/CDscm-agentreg.name +- mzId: CD_scm-agentreg/management-zone/CDscm-agentreg.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-agentreg/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_scm-agentreg/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-agentreg/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-agentreg/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_scm-agentreg/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-agentreg/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-agentreg/management-zone/README.md b/BMW-Dynatrace-config/CD_scm-agentreg/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-agentreg/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_scm-agentreg/management-zone/default.json b/BMW-Dynatrace-config/CD_scm-agentreg/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-agentreg/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-agentreg/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_scm-agentreg/management-zone/management-zone.yaml new file mode 100644 index 00000000..136b450a --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-agentreg/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDscm-agentreg: default.json + +CDscm-agentreg: +- name: CD_scm-agentreg +- tag: scm-agentreg diff --git a/BMW-Dynatrace-config/CD_scm-agentreg/notification/README.md b/BMW-Dynatrace-config/CD_scm-agentreg/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-agentreg/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-agentreg/notification/email.json b/BMW-Dynatrace-config/CD_scm-agentreg/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-agentreg/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-agentreg/notification/msTeams.json b/BMW-Dynatrace-config/CD_scm-agentreg/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-agentreg/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-agentreg/notification/notification.yaml b/BMW-Dynatrace-config/CD_scm-agentreg/notification/notification.yaml new file mode 100644 index 00000000..5cb275b6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-agentreg/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDscm-agentreg-PROD: msTeams.json +- CDscm-agentreg-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDscm-agentreg-PROD: +- name: CD_scm-agentreg PROD +- alertingProfile: CD_scm-agentreg/alerting-profile/CDscm-agentreg-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDscm-agentreg-PROD.EMEA-Prod: +- name: CD_scm-agentreg PROD +- alertingProfile: CD_scm-agentreg/alerting-profile/CDscm-agentreg-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDscm-agentreg-PROD.NA-Prod: +- name: CD_scm-agentreg PROD +- alertingProfile: CD_scm-agentreg/alerting-profile/CDscm-agentreg-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDscm-agentreg-PROD.CN-Prod: +- name: CD_scm-agentreg PROD +- alertingProfile: CD_scm-agentreg/alerting-profile/CDscm-agentreg-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDscm-agentreg-INT: +- name: CD_scm-agentreg INT +- alertingProfile: CD_scm-agentreg/alerting-profile/CDscm-agentreg-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDscm-agentreg-INT.EMEA-PreProd: +- name: CD_scm-agentreg INT +- alertingProfile: CD_scm-agentreg/alerting-profile/CDscm-agentreg-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDscm-agentreg-INT.NA-PreProd: +- name: CD_scm-agentreg INT +- alertingProfile: CD_scm-agentreg/alerting-profile/CDscm-agentreg-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDscm-agentreg-INT.CN-PreProd: +- name: CD_scm-agentreg INT +- alertingProfile: CD_scm-agentreg/alerting-profile/CDscm-agentreg-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-agentreg/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_scm-agentreg/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-agentreg/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-agentreg/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_scm-agentreg/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-agentreg/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-agentreg/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_scm-agentreg/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..28c4c069 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-agentreg/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- scm-agentreg: default.json + +scm-agentreg: +- name: CD_scm-agentreg - +- mzName: CD_scm-agentreg/management-zone/CDscm-agentreg.name +- mzId: CD_scm-agentreg/management-zone/CDscm-agentreg.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-scm/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_scm-scm/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..795af94b --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-scm/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDscm-scm-PROD: default.json +- CDscm-scm-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDscm-scm-PROD: +- name: CD_scm-scm PROD +- tag: scm-scm +- mzId: CD_scm-scm/management-zone/CDscm-scm.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDscm-scm-PROD.EMEA-Prod: +- name: CD_scm-scm PROD +- tag: scm-scm +- mzId: CD_scm-scm/management-zone/CDscm-scm.id +- env: PROD +- skipDeployment: "false" +CDscm-scm-PROD.NA-Prod: +- name: CD_scm-scm PROD +- tag: scm-scm +- mzId: CD_scm-scm/management-zone/CDscm-scm.id +- env: PROD +- skipDeployment: "false" +CDscm-scm-PROD.CN-Prod: +- name: CD_scm-scm PROD +- tag: scm-scm +- mzId: CD_scm-scm/management-zone/CDscm-scm.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDscm-scm-INT: +- name: CD_scm-scm INT +- tag: scm-scm +- mzId: CD_scm-scm/management-zone/CDscm-scm.id +- env: INT +- skipDeployment: "true" +#Configuration +CDscm-scm-INT.EMEA-PreProd: +- name: CD_scm-scm INT +- tag: scm-scm +- mzId: CD_scm-scm/management-zone/CDscm-scm.id +- env: INT +- skipDeployment: "false" +CDscm-scm-INT.NA-PreProd: +- name: CD_scm-scm INT +- tag: scm-scm +- mzId: CD_scm-scm/management-zone/CDscm-scm.id +- env: INT +- skipDeployment: "false" +CDscm-scm-INT.CN-PreProd: +- name: CD_scm-scm INT +- tag: scm-scm +- mzId: CD_scm-scm/management-zone/CDscm-scm.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-scm/alerting-profile/default.json b/BMW-Dynatrace-config/CD_scm-scm/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-scm/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-scm/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_scm-scm/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-scm/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-scm/custom-service-java/README.md b/BMW-Dynatrace-config/CD_scm-scm/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-scm/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-scm/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_scm-scm/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-scm/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-scm/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_scm-scm/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-scm/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-scm/dashboard/README.md b/BMW-Dynatrace-config/CD_scm-scm/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-scm/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-scm/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_scm-scm/dashboard/dashboard.yaml new file mode 100644 index 00000000..9e91ca84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-scm/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDscm-scm-PROD-E2E: defaultPRODE2E.json +- CDscm-scm-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDscm-scm-PROD-E2E: +- name: CD_scm-scm PROD-E2E +- mzName: CD_scm-scm/management-zone/CDscm-scm.name +- mzId: CD_scm-scm/management-zone/CDscm-scm.id +- skipDeployment: "true" +#Configuration +CDscm-scm-PROD-E2E.EMEA-Prod: +- name: CD_scm-scm PROD-E2E +- mzName: CD_scm-scm/management-zone/CDscm-scm.name +- mzId: CD_scm-scm/management-zone/CDscm-scm.id +- tag: scm-scm +- skipDeployment: "false" +CDscm-scm-PROD-E2E.NA-Prod: +- name: CD_scm-scm PROD-E2E +- mzName: CD_scm-scm/management-zone/CDscm-scm.name +- mzId: CD_scm-scm/management-zone/CDscm-scm.id +- tag: scm-scm +- skipDeployment: "false" +CDscm-scm-PROD-E2E.CN-Prod: +- name: CD_scm-scm PROD-E2E +- mzName: CD_scm-scm/management-zone/CDscm-scm.name +- mzId: CD_scm-scm/management-zone/CDscm-scm.id +- tag: scm-scm +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDscm-scm-INT-TEST: +- name: CD_scm-scm INT-TEST +- mzName: CD_scm-scm/management-zone/CDscm-scm.name +- mzId: CD_scm-scm/management-zone/CDscm-scm.id +- tag: scm-scm +- skipDeployment: "true" +#Configuration +CDscm-scm-INT-TEST.EMEA-PreProd: +- name: CD_scm-scm INT-TEST +- mzName: CD_scm-scm/management-zone/CDscm-scm.name +- mzId: CD_scm-scm/management-zone/CDscm-scm.id +- tag: scm-scm +- skipDeployment: "false" +CDscm-scm-INT-TEST.NA-PreProd: +- name: CD_scm-scm INT-TEST +- mzName: CD_scm-scm/management-zone/CDscm-scm.name +- mzId: CD_scm-scm/management-zone/CDscm-scm.id +- env: INT +- skipDeployment: "false" +CDscm-scm-INT-TEST.CN-PreProd: +- name: CD_scm-scm INT-TEST +- mzName: CD_scm-scm/management-zone/CDscm-scm.name +- mzId: CD_scm-scm/management-zone/CDscm-scm.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-scm/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_scm-scm/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-scm/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-scm/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_scm-scm/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-scm/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-scm/management-zone/README.md b/BMW-Dynatrace-config/CD_scm-scm/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-scm/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_scm-scm/management-zone/default.json b/BMW-Dynatrace-config/CD_scm-scm/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-scm/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-scm/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_scm-scm/management-zone/management-zone.yaml new file mode 100644 index 00000000..e811259b --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-scm/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDscm-scm: default.json + +CDscm-scm: +- name: CD_scm-scm +- tag: scm-scm diff --git a/BMW-Dynatrace-config/CD_scm-scm/notification/README.md b/BMW-Dynatrace-config/CD_scm-scm/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-scm/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-scm/notification/email.json b/BMW-Dynatrace-config/CD_scm-scm/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-scm/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-scm/notification/msTeams.json b/BMW-Dynatrace-config/CD_scm-scm/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-scm/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-scm/notification/notification.yaml b/BMW-Dynatrace-config/CD_scm-scm/notification/notification.yaml new file mode 100644 index 00000000..b29810e5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-scm/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDscm-scm-PROD: msTeams.json +- CDscm-scm-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDscm-scm-PROD: +- name: CD_scm-scm PROD +- alertingProfile: CD_scm-scm/alerting-profile/CDscm-scm-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDscm-scm-PROD.EMEA-Prod: +- name: CD_scm-scm PROD +- alertingProfile: CD_scm-scm/alerting-profile/CDscm-scm-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDscm-scm-PROD.NA-Prod: +- name: CD_scm-scm PROD +- alertingProfile: CD_scm-scm/alerting-profile/CDscm-scm-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDscm-scm-PROD.CN-Prod: +- name: CD_scm-scm PROD +- alertingProfile: CD_scm-scm/alerting-profile/CDscm-scm-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDscm-scm-INT: +- name: CD_scm-scm INT +- alertingProfile: CD_scm-scm/alerting-profile/CDscm-scm-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDscm-scm-INT.EMEA-PreProd: +- name: CD_scm-scm INT +- alertingProfile: CD_scm-scm/alerting-profile/CDscm-scm-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDscm-scm-INT.NA-PreProd: +- name: CD_scm-scm INT +- alertingProfile: CD_scm-scm/alerting-profile/CDscm-scm-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDscm-scm-INT.CN-PreProd: +- name: CD_scm-scm INT +- alertingProfile: CD_scm-scm/alerting-profile/CDscm-scm-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-scm/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_scm-scm/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-scm/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-scm/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_scm-scm/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-scm/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-scm/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_scm-scm/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..43d4530a --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-scm/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- scm-scm: default.json + +scm-scm: +- name: CD_scm-scm - +- mzName: CD_scm-scm/management-zone/CDscm-scm.name +- mzId: CD_scm-scm/management-zone/CDscm-scm.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scma-backend/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_scma-backend/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..a4dabf6a --- /dev/null +++ b/BMW-Dynatrace-config/CD_scma-backend/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDscma-backend-PROD: default.json +- CDscma-backend-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDscma-backend-PROD: +- name: CD_scma-backend PROD +- tag: scma-backend +- mzId: CD_scma-backend/management-zone/CDscma-backend.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDscma-backend-PROD.EMEA-Prod: +- name: CD_scma-backend PROD +- tag: scma-backend +- mzId: CD_scma-backend/management-zone/CDscma-backend.id +- env: PROD +- skipDeployment: "false" +CDscma-backend-PROD.NA-Prod: +- name: CD_scma-backend PROD +- tag: scma-backend +- mzId: CD_scma-backend/management-zone/CDscma-backend.id +- env: PROD +- skipDeployment: "false" +CDscma-backend-PROD.CN-Prod: +- name: CD_scma-backend PROD +- tag: scma-backend +- mzId: CD_scma-backend/management-zone/CDscma-backend.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDscma-backend-INT: +- name: CD_scma-backend INT +- tag: scma-backend +- mzId: CD_scma-backend/management-zone/CDscma-backend.id +- env: INT +- skipDeployment: "true" +#Configuration +CDscma-backend-INT.EMEA-PreProd: +- name: CD_scma-backend INT +- tag: scma-backend +- mzId: CD_scma-backend/management-zone/CDscma-backend.id +- env: INT +- skipDeployment: "false" +CDscma-backend-INT.NA-PreProd: +- name: CD_scma-backend INT +- tag: scma-backend +- mzId: CD_scma-backend/management-zone/CDscma-backend.id +- env: INT +- skipDeployment: "false" +CDscma-backend-INT.CN-PreProd: +- name: CD_scma-backend INT +- tag: scma-backend +- mzId: CD_scma-backend/management-zone/CDscma-backend.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scma-backend/alerting-profile/default.json b/BMW-Dynatrace-config/CD_scma-backend/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scma-backend/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scma-backend/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_scma-backend/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_scma-backend/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scma-backend/custom-service-java/README.md b/BMW-Dynatrace-config/CD_scma-backend/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scma-backend/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scma-backend/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_scma-backend/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scma-backend/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scma-backend/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_scma-backend/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scma-backend/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scma-backend/dashboard/README.md b/BMW-Dynatrace-config/CD_scma-backend/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_scma-backend/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scma-backend/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_scma-backend/dashboard/dashboard.yaml new file mode 100644 index 00000000..59243571 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scma-backend/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDscma-backend-PROD-E2E: defaultPRODE2E.json +- CDscma-backend-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDscma-backend-PROD-E2E: +- name: CD_scma-backend PROD-E2E +- mzName: CD_scma-backend/management-zone/CDscma-backend.name +- mzId: CD_scma-backend/management-zone/CDscma-backend.id +- skipDeployment: "true" +#Configuration +CDscma-backend-PROD-E2E.EMEA-Prod: +- name: CD_scma-backend PROD-E2E +- mzName: CD_scma-backend/management-zone/CDscma-backend.name +- mzId: CD_scma-backend/management-zone/CDscma-backend.id +- tag: scma-backend +- skipDeployment: "false" +CDscma-backend-PROD-E2E.NA-Prod: +- name: CD_scma-backend PROD-E2E +- mzName: CD_scma-backend/management-zone/CDscma-backend.name +- mzId: CD_scma-backend/management-zone/CDscma-backend.id +- tag: scma-backend +- skipDeployment: "false" +CDscma-backend-PROD-E2E.CN-Prod: +- name: CD_scma-backend PROD-E2E +- mzName: CD_scma-backend/management-zone/CDscma-backend.name +- mzId: CD_scma-backend/management-zone/CDscma-backend.id +- tag: scma-backend +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDscma-backend-INT-TEST: +- name: CD_scma-backend INT-TEST +- mzName: CD_scma-backend/management-zone/CDscma-backend.name +- mzId: CD_scma-backend/management-zone/CDscma-backend.id +- tag: scma-backend +- skipDeployment: "true" +#Configuration +CDscma-backend-INT-TEST.EMEA-PreProd: +- name: CD_scma-backend INT-TEST +- mzName: CD_scma-backend/management-zone/CDscma-backend.name +- mzId: CD_scma-backend/management-zone/CDscma-backend.id +- tag: scma-backend +- skipDeployment: "false" +CDscma-backend-INT-TEST.NA-PreProd: +- name: CD_scma-backend INT-TEST +- mzName: CD_scma-backend/management-zone/CDscma-backend.name +- mzId: CD_scma-backend/management-zone/CDscma-backend.id +- env: INT +- skipDeployment: "false" +CDscma-backend-INT-TEST.CN-PreProd: +- name: CD_scma-backend INT-TEST +- mzName: CD_scma-backend/management-zone/CDscma-backend.name +- mzId: CD_scma-backend/management-zone/CDscma-backend.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scma-backend/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_scma-backend/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scma-backend/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scma-backend/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_scma-backend/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scma-backend/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scma-backend/management-zone/README.md b/BMW-Dynatrace-config/CD_scma-backend/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scma-backend/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_scma-backend/management-zone/default.json b/BMW-Dynatrace-config/CD_scma-backend/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_scma-backend/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scma-backend/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_scma-backend/management-zone/management-zone.yaml new file mode 100644 index 00000000..75269fad --- /dev/null +++ b/BMW-Dynatrace-config/CD_scma-backend/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDscma-backend: default.json + +CDscma-backend: +- name: CD_scma-backend +- tag: scma-backend diff --git a/BMW-Dynatrace-config/CD_scma-backend/notification/README.md b/BMW-Dynatrace-config/CD_scma-backend/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scma-backend/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scma-backend/notification/email.json b/BMW-Dynatrace-config/CD_scma-backend/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scma-backend/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scma-backend/notification/msTeams.json b/BMW-Dynatrace-config/CD_scma-backend/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scma-backend/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scma-backend/notification/notification.yaml b/BMW-Dynatrace-config/CD_scma-backend/notification/notification.yaml new file mode 100644 index 00000000..8cb62cc7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scma-backend/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDscma-backend-PROD: msTeams.json +- CDscma-backend-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDscma-backend-PROD: +- name: CD_scma-backend PROD +- alertingProfile: CD_scma-backend/alerting-profile/CDscma-backend-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDscma-backend-PROD.EMEA-Prod: +- name: CD_scma-backend PROD +- alertingProfile: CD_scma-backend/alerting-profile/CDscma-backend-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDscma-backend-PROD.NA-Prod: +- name: CD_scma-backend PROD +- alertingProfile: CD_scma-backend/alerting-profile/CDscma-backend-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDscma-backend-PROD.CN-Prod: +- name: CD_scma-backend PROD +- alertingProfile: CD_scma-backend/alerting-profile/CDscma-backend-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDscma-backend-INT: +- name: CD_scma-backend INT +- alertingProfile: CD_scma-backend/alerting-profile/CDscma-backend-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDscma-backend-INT.EMEA-PreProd: +- name: CD_scma-backend INT +- alertingProfile: CD_scma-backend/alerting-profile/CDscma-backend-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDscma-backend-INT.NA-PreProd: +- name: CD_scma-backend INT +- alertingProfile: CD_scma-backend/alerting-profile/CDscma-backend-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDscma-backend-INT.CN-PreProd: +- name: CD_scma-backend INT +- alertingProfile: CD_scma-backend/alerting-profile/CDscma-backend-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scma-backend/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_scma-backend/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_scma-backend/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scma-backend/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_scma-backend/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_scma-backend/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scma-backend/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_scma-backend/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..e1c7b971 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scma-backend/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- scma-backend: default.json + +scma-backend: +- name: CD_scma-backend - +- mzName: CD_scma-backend/management-zone/CDscma-backend.name +- mzId: CD_scma-backend/management-zone/CDscma-backend.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-consumer/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_seam-event-consumer/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..1bcdf2d5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-consumer/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDseam-event-consumer-PROD: default.json +- CDseam-event-consumer-E2E: default.json +- CDseam-event-consumer-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDseam-event-consumer-PROD: +- name: CD_seam-event-consumer PROD +- tag: seam-event-consumer +- mzId: CD_seam-event-consumer/management-zone/CDseam-event-consumer.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDseam-event-consumer-PROD.EMEA-Prod: +- name: CD_seam-event-consumer PROD +- tag: seam-event-consumer +- mzId: CD_seam-event-consumer/management-zone/CDseam-event-consumer.id +- env: PROD +- skipDeployment: "false" +CDseam-event-consumer-PROD.NA-Prod: +- name: CD_seam-event-consumer PROD +- tag: seam-event-consumer +- mzId: CD_seam-event-consumer/management-zone/CDseam-event-consumer.id +- env: PROD +- skipDeployment: "false" +CDseam-event-consumer-PROD.CN-Prod: +- name: CD_seam-event-consumer PROD +- tag: seam-event-consumer +- mzId: CD_seam-event-consumer/management-zone/CDseam-event-consumer.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDseam-event-consumer-E2E: +- name: CD_seam-event-consumer E2E +- tag: seam-event-consumer +- mzId: CD_seam-event-consumer/management-zone/CDseam-event-consumer.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDseam-event-consumer-E2E.EMEA-Prod: +- name: CD_seam-event-consumer E2E +- tag: seam-event-consumer +- mzId: CD_seam-event-consumer/management-zone/CDseam-event-consumer.id +- env: E2E +- skipDeployment: "false" +CDseam-event-consumer-E2E.NA-Prod: +- name: CD_seam-event-consumer E2E +- tag: seam-event-consumer +- mzId: CD_seam-event-consumer/management-zone/CDseam-event-consumer.id +- env: E2E +- skipDeployment: "false" +CDseam-event-consumer-E2E.CN-Prod: +- name: CD_seam-event-consumer E2E +- tag: seam-event-consumer +- mzId: CD_seam-event-consumer/management-zone/CDseam-event-consumer.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDseam-event-consumer-INT: +- name: CD_seam-event-consumer INT +- tag: seam-event-consumer +- mzId: CD_seam-event-consumer/management-zone/CDseam-event-consumer.id +- env: INT +- skipDeployment: "true" +#Configuration +CDseam-event-consumer-INT.EMEA-PreProd: +- name: CD_seam-event-consumer INT +- tag: seam-event-consumer +- mzId: CD_seam-event-consumer/management-zone/CDseam-event-consumer.id +- env: INT +- skipDeployment: "false" +CDseam-event-consumer-INT.NA-PreProd: +- name: CD_seam-event-consumer INT +- tag: seam-event-consumer +- mzId: CD_seam-event-consumer/management-zone/CDseam-event-consumer.id +- env: INT +- skipDeployment: "false" +CDseam-event-consumer-INT.CN-PreProd: +- name: CD_seam-event-consumer INT +- tag: seam-event-consumer +- mzId: CD_seam-event-consumer/management-zone/CDseam-event-consumer.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-consumer/alerting-profile/default.json b/BMW-Dynatrace-config/CD_seam-event-consumer/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-consumer/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-consumer/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_seam-event-consumer/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-consumer/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-consumer/custom-service-java/README.md b/BMW-Dynatrace-config/CD_seam-event-consumer/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-consumer/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-consumer/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_seam-event-consumer/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-consumer/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-consumer/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_seam-event-consumer/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-consumer/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-consumer/dashboard/README.md b/BMW-Dynatrace-config/CD_seam-event-consumer/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-consumer/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-consumer/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_seam-event-consumer/dashboard/dashboard.yaml new file mode 100644 index 00000000..112956eb --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-consumer/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDseam-event-consumer-PROD-E2E: defaultPRODE2E.json +- CDseam-event-consumer-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDseam-event-consumer-PROD-E2E: +- name: CD_seam-event-consumer PROD +- mzName: CD_seam-event-consumer/management-zone/CDseam-event-consumer.name +- mzId: CD_seam-event-consumer/management-zone/CDseam-event-consumer.id +- skipDeployment: "true" +#Configuration +CDseam-event-consumer-PROD-E2E.EMEA-Prod: +- name: CD_seam-event-consumer PROD +- mzName: CD_seam-event-consumer/management-zone/CDseam-event-consumer.name +- mzId: CD_seam-event-consumer/management-zone/CDseam-event-consumer.id +- tag: seam-event-consumer +- skipDeployment: "false" +CDseam-event-consumer-PROD-E2E.NA-Prod: +- name: CD_seam-event-consumer PROD +- mzName: CD_seam-event-consumer/management-zone/CDseam-event-consumer.name +- mzId: CD_seam-event-consumer/management-zone/CDseam-event-consumer.id +- tag: seam-event-consumer +- skipDeployment: "false" +CDseam-event-consumer-PROD-E2E.CN-Prod: +- name: CD_seam-event-consumer PROD +- mzName: CD_seam-event-consumer/management-zone/CDseam-event-consumer.name +- mzId: CD_seam-event-consumer/management-zone/CDseam-event-consumer.id +- tag: seam-event-consumer +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDseam-event-consumer-INT-TEST: +- name: CD_seam-event-consumer INT-TEST +- mzName: CD_seam-event-consumer/management-zone/CDseam-event-consumer.name +- mzId: CD_seam-event-consumer/management-zone/CDseam-event-consumer.id +- tag: seam-event-consumer +- skipDeployment: "true" +#Configuration +CDseam-event-consumer-INT-TEST.EMEA-PreProd: +- name: CD_seam-event-consumer INT-TEST +- mzName: CD_seam-event-consumer/management-zone/CDseam-event-consumer.name +- mzId: CD_seam-event-consumer/management-zone/CDseam-event-consumer.id +- tag: seam-event-consumer +- skipDeployment: "false" +CDseam-event-consumer-INT-TEST.NA-PreProd: +- name: CD_seam-event-consumer INT-TEST +- mzName: CD_seam-event-consumer/management-zone/CDseam-event-consumer.name +- mzId: CD_seam-event-consumer/management-zone/CDseam-event-consumer.id +- env: INT +- skipDeployment: "false" +CDseam-event-consumer-INT-TEST.CN-PreProd: +- name: CD_seam-event-consumer INT-TEST +- mzName: CD_seam-event-consumer/management-zone/CDseam-event-consumer.name +- mzId: CD_seam-event-consumer/management-zone/CDseam-event-consumer.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-consumer/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_seam-event-consumer/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-consumer/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-consumer/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_seam-event-consumer/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-consumer/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-consumer/management-zone/README.md b/BMW-Dynatrace-config/CD_seam-event-consumer/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-consumer/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_seam-event-consumer/management-zone/default.json b/BMW-Dynatrace-config/CD_seam-event-consumer/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-consumer/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-consumer/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_seam-event-consumer/management-zone/management-zone.yaml new file mode 100644 index 00000000..ce6ad6ed --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-consumer/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDseam-event-consumer: default.json + +CDseam-event-consumer: +- name: CD_seam-event-consumer +- tag: seam-event-consumer diff --git a/BMW-Dynatrace-config/CD_seam-event-consumer/notification/README.md b/BMW-Dynatrace-config/CD_seam-event-consumer/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-consumer/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-consumer/notification/email.json b/BMW-Dynatrace-config/CD_seam-event-consumer/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-consumer/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-consumer/notification/msTeams.json b/BMW-Dynatrace-config/CD_seam-event-consumer/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-consumer/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-consumer/notification/notification.yaml b/BMW-Dynatrace-config/CD_seam-event-consumer/notification/notification.yaml new file mode 100644 index 00000000..79024686 --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-consumer/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDseam-event-consumer-PROD: msTeams.json +- CDseam-event-consumer-E2E: msTeams.json +- CDseam-event-consumer-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDseam-event-consumer-PROD: +- name: CD_seam-event-consumer PROD +- alertingProfile: CD_seam-event-consumer/alerting-profile/CDseam-event-consumer-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDseam-event-consumer-PROD.EMEA-Prod: +- name: CD_seam-event-consumer PROD +- alertingProfile: CD_seam-event-consumer/alerting-profile/CDseam-event-consumer-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDseam-event-consumer-PROD.NA-Prod: +- name: CD_seam-event-consumer PROD +- alertingProfile: CD_seam-event-consumer/alerting-profile/CDseam-event-consumer-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDseam-event-consumer-PROD.CN-Prod: +- name: CD_seam-event-consumer PROD +- alertingProfile: CD_seam-event-consumer/alerting-profile/CDseam-event-consumer-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDseam-event-consumer-E2E: +- name: CD_seam-event-consumer E2E +- alertingProfile: CD_seam-event-consumer/alerting-profile/CDseam-event-consumer-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDseam-event-consumer-E2E.EMEA-Prod: +- name: CD_seam-event-consumer E2E +- alertingProfile: CD_seam-event-consumer/alerting-profile/CDseam-event-consumer-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDseam-event-consumer-E2E.NA-Prod: +- name: CD_seam-event-consumer E2E +- alertingProfile: CD_seam-event-consumer/alerting-profile/CDseam-event-consumer-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDseam-event-consumer-E2E.CN-Prod: +- name: CD_seam-event-consumer E2E +- alertingProfile: CD_seam-event-consumer/alerting-profile/CDseam-event-consumer-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDseam-event-consumer-INT: +- name: CD_seam-event-consumer INT +- alertingProfile: CD_seam-event-consumer/alerting-profile/CDseam-event-consumer-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDseam-event-consumer-INT.EMEA-PreProd: +- name: CD_seam-event-consumer INT +- alertingProfile: CD_seam-event-consumer/alerting-profile/CDseam-event-consumer-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDseam-event-consumer-INT.NA-PreProd: +- name: CD_seam-event-consumer INT +- alertingProfile: CD_seam-event-consumer/alerting-profile/CDseam-event-consumer-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDseam-event-consumer-INT.CN-PreProd: +- name: CD_seam-event-consumer INT +- alertingProfile: CD_seam-event-consumer/alerting-profile/CDseam-event-consumer-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-consumer/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_seam-event-consumer/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-consumer/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-consumer/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_seam-event-consumer/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-consumer/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-consumer/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_seam-event-consumer/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..198c892e --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-consumer/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- seam-event-consumer: default.json + +seam-event-consumer: +- name: CD_seam-event-consumer - +- mzName: CD_seam-event-consumer/management-zone/CDseam-event-consumer.name +- mzId: CD_seam-event-consumer/management-zone/CDseam-event-consumer.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-producer/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_seam-event-producer/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..40b6637b --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-producer/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDseam-event-producer-PROD: default.json +- CDseam-event-producer-E2E: default.json +- CDseam-event-producer-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDseam-event-producer-PROD: +- name: CD_seam-event-producer PROD +- tag: seam-event-producer +- mzId: CD_seam-event-producer/management-zone/CDseam-event-producer.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDseam-event-producer-PROD.EMEA-Prod: +- name: CD_seam-event-producer PROD +- tag: seam-event-producer +- mzId: CD_seam-event-producer/management-zone/CDseam-event-producer.id +- env: PROD +- skipDeployment: "false" +CDseam-event-producer-PROD.NA-Prod: +- name: CD_seam-event-producer PROD +- tag: seam-event-producer +- mzId: CD_seam-event-producer/management-zone/CDseam-event-producer.id +- env: PROD +- skipDeployment: "false" +CDseam-event-producer-PROD.CN-Prod: +- name: CD_seam-event-producer PROD +- tag: seam-event-producer +- mzId: CD_seam-event-producer/management-zone/CDseam-event-producer.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDseam-event-producer-E2E: +- name: CD_seam-event-producer E2E +- tag: seam-event-producer +- mzId: CD_seam-event-producer/management-zone/CDseam-event-producer.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDseam-event-producer-E2E.EMEA-Prod: +- name: CD_seam-event-producer E2E +- tag: seam-event-producer +- mzId: CD_seam-event-producer/management-zone/CDseam-event-producer.id +- env: E2E +- skipDeployment: "false" +CDseam-event-producer-E2E.NA-Prod: +- name: CD_seam-event-producer E2E +- tag: seam-event-producer +- mzId: CD_seam-event-producer/management-zone/CDseam-event-producer.id +- env: E2E +- skipDeployment: "false" +CDseam-event-producer-E2E.CN-Prod: +- name: CD_seam-event-producer E2E +- tag: seam-event-producer +- mzId: CD_seam-event-producer/management-zone/CDseam-event-producer.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDseam-event-producer-INT: +- name: CD_seam-event-producer INT +- tag: seam-event-producer +- mzId: CD_seam-event-producer/management-zone/CDseam-event-producer.id +- env: INT +- skipDeployment: "true" +#Configuration +CDseam-event-producer-INT.EMEA-PreProd: +- name: CD_seam-event-producer INT +- tag: seam-event-producer +- mzId: CD_seam-event-producer/management-zone/CDseam-event-producer.id +- env: INT +- skipDeployment: "false" +CDseam-event-producer-INT.NA-PreProd: +- name: CD_seam-event-producer INT +- tag: seam-event-producer +- mzId: CD_seam-event-producer/management-zone/CDseam-event-producer.id +- env: INT +- skipDeployment: "false" +CDseam-event-producer-INT.CN-PreProd: +- name: CD_seam-event-producer INT +- tag: seam-event-producer +- mzId: CD_seam-event-producer/management-zone/CDseam-event-producer.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-producer/alerting-profile/default.json b/BMW-Dynatrace-config/CD_seam-event-producer/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-producer/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-producer/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_seam-event-producer/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-producer/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-producer/custom-service-java/README.md b/BMW-Dynatrace-config/CD_seam-event-producer/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-producer/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-producer/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_seam-event-producer/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-producer/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-producer/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_seam-event-producer/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-producer/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-producer/dashboard/README.md b/BMW-Dynatrace-config/CD_seam-event-producer/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-producer/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-producer/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_seam-event-producer/dashboard/dashboard.yaml new file mode 100644 index 00000000..8fdd56e7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-producer/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDseam-event-producer-PROD-E2E: defaultPRODE2E.json +- CDseam-event-producer-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDseam-event-producer-PROD-E2E: +- name: CD_seam-event-producer PROD +- mzName: CD_seam-event-producer/management-zone/CDseam-event-producer.name +- mzId: CD_seam-event-producer/management-zone/CDseam-event-producer.id +- skipDeployment: "true" +#Configuration +CDseam-event-producer-PROD-E2E.EMEA-Prod: +- name: CD_seam-event-producer PROD +- mzName: CD_seam-event-producer/management-zone/CDseam-event-producer.name +- mzId: CD_seam-event-producer/management-zone/CDseam-event-producer.id +- tag: seam-event-producer +- skipDeployment: "false" +CDseam-event-producer-PROD-E2E.NA-Prod: +- name: CD_seam-event-producer PROD +- mzName: CD_seam-event-producer/management-zone/CDseam-event-producer.name +- mzId: CD_seam-event-producer/management-zone/CDseam-event-producer.id +- tag: seam-event-producer +- skipDeployment: "false" +CDseam-event-producer-PROD-E2E.CN-Prod: +- name: CD_seam-event-producer PROD +- mzName: CD_seam-event-producer/management-zone/CDseam-event-producer.name +- mzId: CD_seam-event-producer/management-zone/CDseam-event-producer.id +- tag: seam-event-producer +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDseam-event-producer-INT-TEST: +- name: CD_seam-event-producer INT-TEST +- mzName: CD_seam-event-producer/management-zone/CDseam-event-producer.name +- mzId: CD_seam-event-producer/management-zone/CDseam-event-producer.id +- tag: seam-event-producer +- skipDeployment: "true" +#Configuration +CDseam-event-producer-INT-TEST.EMEA-PreProd: +- name: CD_seam-event-producer INT-TEST +- mzName: CD_seam-event-producer/management-zone/CDseam-event-producer.name +- mzId: CD_seam-event-producer/management-zone/CDseam-event-producer.id +- tag: seam-event-producer +- skipDeployment: "false" +CDseam-event-producer-INT-TEST.NA-PreProd: +- name: CD_seam-event-producer INT-TEST +- mzName: CD_seam-event-producer/management-zone/CDseam-event-producer.name +- mzId: CD_seam-event-producer/management-zone/CDseam-event-producer.id +- env: INT +- skipDeployment: "false" +CDseam-event-producer-INT-TEST.CN-PreProd: +- name: CD_seam-event-producer INT-TEST +- mzName: CD_seam-event-producer/management-zone/CDseam-event-producer.name +- mzId: CD_seam-event-producer/management-zone/CDseam-event-producer.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-producer/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_seam-event-producer/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-producer/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-producer/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_seam-event-producer/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-producer/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-producer/management-zone/README.md b/BMW-Dynatrace-config/CD_seam-event-producer/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-producer/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_seam-event-producer/management-zone/default.json b/BMW-Dynatrace-config/CD_seam-event-producer/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-producer/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-producer/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_seam-event-producer/management-zone/management-zone.yaml new file mode 100644 index 00000000..7bd13eef --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-producer/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDseam-event-producer: default.json + +CDseam-event-producer: +- name: CD_seam-event-producer +- tag: seam-event-producer diff --git a/BMW-Dynatrace-config/CD_seam-event-producer/notification/README.md b/BMW-Dynatrace-config/CD_seam-event-producer/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-producer/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-producer/notification/email.json b/BMW-Dynatrace-config/CD_seam-event-producer/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-producer/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-producer/notification/msTeams.json b/BMW-Dynatrace-config/CD_seam-event-producer/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-producer/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-producer/notification/notification.yaml b/BMW-Dynatrace-config/CD_seam-event-producer/notification/notification.yaml new file mode 100644 index 00000000..8605beb4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-producer/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDseam-event-producer-PROD: msTeams.json +- CDseam-event-producer-E2E: msTeams.json +- CDseam-event-producer-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDseam-event-producer-PROD: +- name: CD_seam-event-producer PROD +- alertingProfile: CD_seam-event-producer/alerting-profile/CDseam-event-producer-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDseam-event-producer-PROD.EMEA-Prod: +- name: CD_seam-event-producer PROD +- alertingProfile: CD_seam-event-producer/alerting-profile/CDseam-event-producer-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDseam-event-producer-PROD.NA-Prod: +- name: CD_seam-event-producer PROD +- alertingProfile: CD_seam-event-producer/alerting-profile/CDseam-event-producer-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDseam-event-producer-PROD.CN-Prod: +- name: CD_seam-event-producer PROD +- alertingProfile: CD_seam-event-producer/alerting-profile/CDseam-event-producer-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDseam-event-producer-E2E: +- name: CD_seam-event-producer E2E +- alertingProfile: CD_seam-event-producer/alerting-profile/CDseam-event-producer-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDseam-event-producer-E2E.EMEA-Prod: +- name: CD_seam-event-producer E2E +- alertingProfile: CD_seam-event-producer/alerting-profile/CDseam-event-producer-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDseam-event-producer-E2E.NA-Prod: +- name: CD_seam-event-producer E2E +- alertingProfile: CD_seam-event-producer/alerting-profile/CDseam-event-producer-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDseam-event-producer-E2E.CN-Prod: +- name: CD_seam-event-producer E2E +- alertingProfile: CD_seam-event-producer/alerting-profile/CDseam-event-producer-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDseam-event-producer-INT: +- name: CD_seam-event-producer INT +- alertingProfile: CD_seam-event-producer/alerting-profile/CDseam-event-producer-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDseam-event-producer-INT.EMEA-PreProd: +- name: CD_seam-event-producer INT +- alertingProfile: CD_seam-event-producer/alerting-profile/CDseam-event-producer-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDseam-event-producer-INT.NA-PreProd: +- name: CD_seam-event-producer INT +- alertingProfile: CD_seam-event-producer/alerting-profile/CDseam-event-producer-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDseam-event-producer-INT.CN-PreProd: +- name: CD_seam-event-producer INT +- alertingProfile: CD_seam-event-producer/alerting-profile/CDseam-event-producer-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-producer/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_seam-event-producer/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-producer/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-producer/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_seam-event-producer/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-producer/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-producer/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_seam-event-producer/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..058b6093 --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-producer/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- seam-event-producer: default.json + +seam-event-producer: +- name: CD_seam-event-producer - +- mzName: CD_seam-event-producer/management-zone/CDseam-event-producer.name +- mzId: CD_seam-event-producer/management-zone/CDseam-event-producer.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_search-composite-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_search-composite-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..3c7098d9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_search-composite-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDsearch-composite-service-PROD: default.json +- CDsearch-composite-service-E2E: default.json +- CDsearch-composite-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDsearch-composite-service-PROD: +- name: CD_search-composite-service PROD +- tag: search-composite-service +- mzId: CD_search-composite-service/management-zone/CDsearch-composite-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDsearch-composite-service-PROD.EMEA-Prod: +- name: CD_search-composite-service PROD +- tag: search-composite-service +- mzId: CD_search-composite-service/management-zone/CDsearch-composite-service.id +- env: PROD +- skipDeployment: "false" +CDsearch-composite-service-PROD.NA-Prod: +- name: CD_search-composite-service PROD +- tag: search-composite-service +- mzId: CD_search-composite-service/management-zone/CDsearch-composite-service.id +- env: PROD +- skipDeployment: "false" +CDsearch-composite-service-PROD.CN-Prod: +- name: CD_search-composite-service PROD +- tag: search-composite-service +- mzId: CD_search-composite-service/management-zone/CDsearch-composite-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDsearch-composite-service-E2E: +- name: CD_search-composite-service E2E +- tag: search-composite-service +- mzId: CD_search-composite-service/management-zone/CDsearch-composite-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDsearch-composite-service-E2E.EMEA-Prod: +- name: CD_search-composite-service E2E +- tag: search-composite-service +- mzId: CD_search-composite-service/management-zone/CDsearch-composite-service.id +- env: E2E +- skipDeployment: "false" +CDsearch-composite-service-E2E.NA-Prod: +- name: CD_search-composite-service E2E +- tag: search-composite-service +- mzId: CD_search-composite-service/management-zone/CDsearch-composite-service.id +- env: E2E +- skipDeployment: "false" +CDsearch-composite-service-E2E.CN-Prod: +- name: CD_search-composite-service E2E +- tag: search-composite-service +- mzId: CD_search-composite-service/management-zone/CDsearch-composite-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDsearch-composite-service-INT: +- name: CD_search-composite-service INT +- tag: search-composite-service +- mzId: CD_search-composite-service/management-zone/CDsearch-composite-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDsearch-composite-service-INT.EMEA-PreProd: +- name: CD_search-composite-service INT +- tag: search-composite-service +- mzId: CD_search-composite-service/management-zone/CDsearch-composite-service.id +- env: INT +- skipDeployment: "false" +CDsearch-composite-service-INT.NA-PreProd: +- name: CD_search-composite-service INT +- tag: search-composite-service +- mzId: CD_search-composite-service/management-zone/CDsearch-composite-service.id +- env: INT +- skipDeployment: "false" +CDsearch-composite-service-INT.CN-PreProd: +- name: CD_search-composite-service INT +- tag: search-composite-service +- mzId: CD_search-composite-service/management-zone/CDsearch-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_search-composite-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_search-composite-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_search-composite-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_search-composite-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_search-composite-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_search-composite-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_search-composite-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_search-composite-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_search-composite-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_search-composite-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_search-composite-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_search-composite-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_search-composite-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_search-composite-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_search-composite-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_search-composite-service/dashboard/README.md b/BMW-Dynatrace-config/CD_search-composite-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_search-composite-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_search-composite-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_search-composite-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..781683fb --- /dev/null +++ b/BMW-Dynatrace-config/CD_search-composite-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDsearch-composite-service-PROD-E2E: defaultPRODE2E.json +- CDsearch-composite-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDsearch-composite-service-PROD-E2E: +- name: CD_search-composite-service PROD +- mzName: CD_search-composite-service/management-zone/CDsearch-composite-service.name +- mzId: CD_search-composite-service/management-zone/CDsearch-composite-service.id +- skipDeployment: "true" +#Configuration +CDsearch-composite-service-PROD-E2E.EMEA-Prod: +- name: CD_search-composite-service PROD +- mzName: CD_search-composite-service/management-zone/CDsearch-composite-service.name +- mzId: CD_search-composite-service/management-zone/CDsearch-composite-service.id +- tag: search-composite-service +- skipDeployment: "false" +CDsearch-composite-service-PROD-E2E.NA-Prod: +- name: CD_search-composite-service PROD +- mzName: CD_search-composite-service/management-zone/CDsearch-composite-service.name +- mzId: CD_search-composite-service/management-zone/CDsearch-composite-service.id +- tag: search-composite-service +- skipDeployment: "false" +CDsearch-composite-service-PROD-E2E.CN-Prod: +- name: CD_search-composite-service PROD +- mzName: CD_search-composite-service/management-zone/CDsearch-composite-service.name +- mzId: CD_search-composite-service/management-zone/CDsearch-composite-service.id +- tag: search-composite-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDsearch-composite-service-INT-TEST: +- name: CD_search-composite-service INT-TEST +- mzName: CD_search-composite-service/management-zone/CDsearch-composite-service.name +- mzId: CD_search-composite-service/management-zone/CDsearch-composite-service.id +- tag: search-composite-service +- skipDeployment: "true" +#Configuration +CDsearch-composite-service-INT-TEST.EMEA-PreProd: +- name: CD_search-composite-service INT-TEST +- mzName: CD_search-composite-service/management-zone/CDsearch-composite-service.name +- mzId: CD_search-composite-service/management-zone/CDsearch-composite-service.id +- tag: search-composite-service +- skipDeployment: "false" +CDsearch-composite-service-INT-TEST.NA-PreProd: +- name: CD_search-composite-service INT-TEST +- mzName: CD_search-composite-service/management-zone/CDsearch-composite-service.name +- mzId: CD_search-composite-service/management-zone/CDsearch-composite-service.id +- env: INT +- skipDeployment: "false" +CDsearch-composite-service-INT-TEST.CN-PreProd: +- name: CD_search-composite-service INT-TEST +- mzName: CD_search-composite-service/management-zone/CDsearch-composite-service.name +- mzId: CD_search-composite-service/management-zone/CDsearch-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_search-composite-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_search-composite-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_search-composite-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_search-composite-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_search-composite-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_search-composite-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_search-composite-service/management-zone/README.md b/BMW-Dynatrace-config/CD_search-composite-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_search-composite-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_search-composite-service/management-zone/default.json b/BMW-Dynatrace-config/CD_search-composite-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_search-composite-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_search-composite-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_search-composite-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..ff251c56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_search-composite-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDsearch-composite-service: default.json + +CDsearch-composite-service: +- name: CD_search-composite-service +- tag: search-composite-service diff --git a/BMW-Dynatrace-config/CD_search-composite-service/notification/README.md b/BMW-Dynatrace-config/CD_search-composite-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_search-composite-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_search-composite-service/notification/email.json b/BMW-Dynatrace-config/CD_search-composite-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_search-composite-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_search-composite-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_search-composite-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_search-composite-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_search-composite-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_search-composite-service/notification/notification.yaml new file mode 100644 index 00000000..b3e7075e --- /dev/null +++ b/BMW-Dynatrace-config/CD_search-composite-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDsearch-composite-service-PROD: msTeams.json +- CDsearch-composite-service-E2E: msTeams.json +- CDsearch-composite-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDsearch-composite-service-PROD: +- name: CD_search-composite-service PROD +- alertingProfile: CD_search-composite-service/alerting-profile/CDsearch-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDsearch-composite-service-PROD.EMEA-Prod: +- name: CD_search-composite-service PROD +- alertingProfile: CD_search-composite-service/alerting-profile/CDsearch-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDsearch-composite-service-PROD.NA-Prod: +- name: CD_search-composite-service PROD +- alertingProfile: CD_search-composite-service/alerting-profile/CDsearch-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDsearch-composite-service-PROD.CN-Prod: +- name: CD_search-composite-service PROD +- alertingProfile: CD_search-composite-service/alerting-profile/CDsearch-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDsearch-composite-service-E2E: +- name: CD_search-composite-service E2E +- alertingProfile: CD_search-composite-service/alerting-profile/CDsearch-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDsearch-composite-service-E2E.EMEA-Prod: +- name: CD_search-composite-service E2E +- alertingProfile: CD_search-composite-service/alerting-profile/CDsearch-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDsearch-composite-service-E2E.NA-Prod: +- name: CD_search-composite-service E2E +- alertingProfile: CD_search-composite-service/alerting-profile/CDsearch-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDsearch-composite-service-E2E.CN-Prod: +- name: CD_search-composite-service E2E +- alertingProfile: CD_search-composite-service/alerting-profile/CDsearch-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDsearch-composite-service-INT: +- name: CD_search-composite-service INT +- alertingProfile: CD_search-composite-service/alerting-profile/CDsearch-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDsearch-composite-service-INT.EMEA-PreProd: +- name: CD_search-composite-service INT +- alertingProfile: CD_search-composite-service/alerting-profile/CDsearch-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDsearch-composite-service-INT.NA-PreProd: +- name: CD_search-composite-service INT +- alertingProfile: CD_search-composite-service/alerting-profile/CDsearch-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDsearch-composite-service-INT.CN-PreProd: +- name: CD_search-composite-service INT +- alertingProfile: CD_search-composite-service/alerting-profile/CDsearch-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_search-composite-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_search-composite-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_search-composite-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_search-composite-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_search-composite-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_search-composite-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_search-composite-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_search-composite-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..64873a80 --- /dev/null +++ b/BMW-Dynatrace-config/CD_search-composite-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- search-composite-service: default.json + +search-composite-service: +- name: CD_search-composite-service - +- mzName: CD_search-composite-service/management-zone/CDsearch-composite-service.name +- mzId: CD_search-composite-service/management-zone/CDsearch-composite-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_send-to-car-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_send-to-car-service/alerting-profile/alerting-profile.yaml index 0e0b8f40..16fe045d 100644 --- a/BMW-Dynatrace-config/CD_send-to-car-service/alerting-profile/alerting-profile.yaml +++ b/BMW-Dynatrace-config/CD_send-to-car-service/alerting-profile/alerting-profile.yaml @@ -1,6 +1,88 @@ -CDsend-to-car-service: -- name: CD_send-to-car-service/management-zone/CDsend-to-car-service.name +config: +- CDsend-to-car-service-PROD: default.json +- CDsend-to-car-service-E2E: default.json +- CDsend-to-car-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDsend-to-car-service-PROD: +- name: CD_send-to-car-service PROD - tag: send-to-car-service - mzId: CD_send-to-car-service/management-zone/CDsend-to-car-service.id -config: -- CDsend-to-car-service: send-to-car-service.json +- env: PROD +- skipDeployment: "true" +#Configuration +CDsend-to-car-service-PROD.EMEA-Prod: +- name: CD_send-to-car-service PROD +- tag: send-to-car-service +- mzId: CD_send-to-car-service/management-zone/CDsend-to-car-service.id +- env: PROD +- skipDeployment: "false" +CDsend-to-car-service-PROD.NA-Prod: +- name: CD_send-to-car-service PROD +- tag: send-to-car-service +- mzId: CD_send-to-car-service/management-zone/CDsend-to-car-service.id +- env: PROD +- skipDeployment: "false" +CDsend-to-car-service-PROD.CN-Prod: +- name: CD_send-to-car-service PROD +- tag: send-to-car-service +- mzId: CD_send-to-car-service/management-zone/CDsend-to-car-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDsend-to-car-service-E2E: +- name: CD_send-to-car-service E2E +- tag: send-to-car-service +- mzId: CD_send-to-car-service/management-zone/CDsend-to-car-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDsend-to-car-service-E2E.EMEA-Prod: +- name: CD_send-to-car-service E2E +- tag: send-to-car-service +- mzId: CD_send-to-car-service/management-zone/CDsend-to-car-service.id +- env: E2E +- skipDeployment: "false" +CDsend-to-car-service-E2E.NA-Prod: +- name: CD_send-to-car-service E2E +- tag: send-to-car-service +- mzId: CD_send-to-car-service/management-zone/CDsend-to-car-service.id +- env: E2E +- skipDeployment: "false" +CDsend-to-car-service-E2E.CN-Prod: +- name: CD_send-to-car-service E2E +- tag: send-to-car-service +- mzId: CD_send-to-car-service/management-zone/CDsend-to-car-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDsend-to-car-service-INT: +- name: CD_send-to-car-service INT +- tag: send-to-car-service +- mzId: CD_send-to-car-service/management-zone/CDsend-to-car-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDsend-to-car-service-INT.EMEA-PreProd: +- name: CD_send-to-car-service INT +- tag: send-to-car-service +- mzId: CD_send-to-car-service/management-zone/CDsend-to-car-service.id +- env: INT +- skipDeployment: "false" +CDsend-to-car-service-INT.NA-PreProd: +- name: CD_send-to-car-service INT +- tag: send-to-car-service +- mzId: CD_send-to-car-service/management-zone/CDsend-to-car-service.id +- env: INT +- skipDeployment: "false" +CDsend-to-car-service-INT.CN-PreProd: +- name: CD_send-to-car-service INT +- tag: send-to-car-service +- mzId: CD_send-to-car-service/management-zone/CDsend-to-car-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_send-to-car-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_send-to-car-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_send-to-car-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_send-to-car-service/alerting-profile/send-to-car-service.json b/BMW-Dynatrace-config/CD_send-to-car-service/alerting-profile/send-to-car-service.json deleted file mode 100644 index d10ad44a..00000000 --- a/BMW-Dynatrace-config/CD_send-to-car-service/alerting-profile/send-to-car-service.json +++ /dev/null @@ -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}}" - } - ] - } - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_send-to-car-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_send-to-car-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_send-to-car-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_send-to-car-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_send-to-car-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_send-to-car-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_send-to-car-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_send-to-car-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_send-to-car-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_send-to-car-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_send-to-car-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_send-to-car-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_send-to-car-service/dashboard/README.md b/BMW-Dynatrace-config/CD_send-to-car-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_send-to-car-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_send-to-car-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_send-to-car-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..5aca52be --- /dev/null +++ b/BMW-Dynatrace-config/CD_send-to-car-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDsend-to-car-service-PROD-E2E: defaultPRODE2E.json +- CDsend-to-car-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDsend-to-car-service-PROD-E2E: +- name: CD_send-to-car-service PROD +- mzName: CD_send-to-car-service/management-zone/CDsend-to-car-service.name +- mzId: CD_send-to-car-service/management-zone/CDsend-to-car-service.id +- skipDeployment: "true" +#Configuration +CDsend-to-car-service-PROD-E2E.EMEA-Prod: +- name: CD_send-to-car-service PROD +- mzName: CD_send-to-car-service/management-zone/CDsend-to-car-service.name +- mzId: CD_send-to-car-service/management-zone/CDsend-to-car-service.id +- tag: send-to-car-service +- skipDeployment: "false" +CDsend-to-car-service-PROD-E2E.NA-Prod: +- name: CD_send-to-car-service PROD +- mzName: CD_send-to-car-service/management-zone/CDsend-to-car-service.name +- mzId: CD_send-to-car-service/management-zone/CDsend-to-car-service.id +- tag: send-to-car-service +- skipDeployment: "false" +CDsend-to-car-service-PROD-E2E.CN-Prod: +- name: CD_send-to-car-service PROD +- mzName: CD_send-to-car-service/management-zone/CDsend-to-car-service.name +- mzId: CD_send-to-car-service/management-zone/CDsend-to-car-service.id +- tag: send-to-car-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDsend-to-car-service-INT-TEST: +- name: CD_send-to-car-service INT-TEST +- mzName: CD_send-to-car-service/management-zone/CDsend-to-car-service.name +- mzId: CD_send-to-car-service/management-zone/CDsend-to-car-service.id +- tag: send-to-car-service +- skipDeployment: "true" +#Configuration +CDsend-to-car-service-INT-TEST.EMEA-PreProd: +- name: CD_send-to-car-service INT-TEST +- mzName: CD_send-to-car-service/management-zone/CDsend-to-car-service.name +- mzId: CD_send-to-car-service/management-zone/CDsend-to-car-service.id +- tag: send-to-car-service +- skipDeployment: "false" +CDsend-to-car-service-INT-TEST.NA-PreProd: +- name: CD_send-to-car-service INT-TEST +- mzName: CD_send-to-car-service/management-zone/CDsend-to-car-service.name +- mzId: CD_send-to-car-service/management-zone/CDsend-to-car-service.id +- env: INT +- skipDeployment: "false" +CDsend-to-car-service-INT-TEST.CN-PreProd: +- name: CD_send-to-car-service INT-TEST +- mzName: CD_send-to-car-service/management-zone/CDsend-to-car-service.name +- mzId: CD_send-to-car-service/management-zone/CDsend-to-car-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_send-to-car-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_send-to-car-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_send-to-car-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_send-to-car-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_send-to-car-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_send-to-car-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_send-to-car-service/management-zone/CDsend-to-car-service.json b/BMW-Dynatrace-config/CD_send-to-car-service/management-zone/CDsend-to-car-service.json deleted file mode 100644 index b2a9367b..00000000 --- a/BMW-Dynatrace-config/CD_send-to-car-service/management-zone/CDsend-to-car-service.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "dimensionalRules": [], - "name": "{{.name}}", - "rules": [ - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "{{.tag}}" - } - }, - "key": { - "attribute": "SERVICE_TAGS" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "HealthResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PingResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PrometheusResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - } - ], - "enabled": true, - "propagationTypes": [ - "SERVICE_TO_PROCESS_GROUP_LIKE", - "SERVICE_TO_HOST_LIKE" - ], - "type": "SERVICE" - }, - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "{{.tag}}" - } - }, - "key": { - "attribute": "PROCESS_GROUP_TAGS" - } - } - ], - "enabled": true, - "propagationTypes": [ - "PROCESS_GROUP_TO_HOST" - ], - "type": "PROCESS_GROUP" - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_send-to-car-service/management-zone/README.md b/BMW-Dynatrace-config/CD_send-to-car-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_send-to-car-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_send-to-car-service/management-zone/default.json b/BMW-Dynatrace-config/CD_send-to-car-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_send-to-car-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_send-to-car-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_send-to-car-service/management-zone/management-zone.yaml index 806ea106..157b1b13 100644 --- a/BMW-Dynatrace-config/CD_send-to-car-service/management-zone/management-zone.yaml +++ b/BMW-Dynatrace-config/CD_send-to-car-service/management-zone/management-zone.yaml @@ -1,20 +1,6 @@ -CDsend-to-car-service.CN-PreProd: -- name: CD_send-to-car-service -- tag: send-to-car-service -CDsend-to-car-service.CN-Prod: -- name: CD_send-to-car-service -- tag: send-to-car-service -CDsend-to-car-service.EMEA-PreProd: -- name: CD_send-to-car-service -- tag: send-to-car-service -CDsend-to-car-service.EMEA-Prod: -- name: CD_send-to-car-service -- tag: send-to-car-service -CDsend-to-car-service.NA-PreProd: -- name: CD_send-to-car-service -- tag: send-to-car-service -CDsend-to-car-service.NA-Prod: -- name: CD_send-to-car-service -- tag: send-to-car-service config: -- CDsend-to-car-service: CDsend-to-car-service.json +- CDsend-to-car-service: default.json + +CDsend-to-car-service: +- name: CD_send-to-car-service +- tag: send-to-car-service diff --git a/BMW-Dynatrace-config/CD_send-to-car-service/notification/README.md b/BMW-Dynatrace-config/CD_send-to-car-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_send-to-car-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_send-to-car-service/notification/email.json b/BMW-Dynatrace-config/CD_send-to-car-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_send-to-car-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_send-to-car-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_send-to-car-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_send-to-car-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_send-to-car-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_send-to-car-service/notification/notification.yaml new file mode 100644 index 00000000..a0961ea3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_send-to-car-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDsend-to-car-service-PROD: msTeams.json +- CDsend-to-car-service-E2E: msTeams.json +- CDsend-to-car-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDsend-to-car-service-PROD: +- name: CD_send-to-car-service PROD +- alertingProfile: CD_send-to-car-service/alerting-profile/CDsend-to-car-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDsend-to-car-service-PROD.EMEA-Prod: +- name: CD_send-to-car-service PROD +- alertingProfile: CD_send-to-car-service/alerting-profile/CDsend-to-car-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDsend-to-car-service-PROD.NA-Prod: +- name: CD_send-to-car-service PROD +- alertingProfile: CD_send-to-car-service/alerting-profile/CDsend-to-car-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDsend-to-car-service-PROD.CN-Prod: +- name: CD_send-to-car-service PROD +- alertingProfile: CD_send-to-car-service/alerting-profile/CDsend-to-car-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDsend-to-car-service-E2E: +- name: CD_send-to-car-service E2E +- alertingProfile: CD_send-to-car-service/alerting-profile/CDsend-to-car-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDsend-to-car-service-E2E.EMEA-Prod: +- name: CD_send-to-car-service E2E +- alertingProfile: CD_send-to-car-service/alerting-profile/CDsend-to-car-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDsend-to-car-service-E2E.NA-Prod: +- name: CD_send-to-car-service E2E +- alertingProfile: CD_send-to-car-service/alerting-profile/CDsend-to-car-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDsend-to-car-service-E2E.CN-Prod: +- name: CD_send-to-car-service E2E +- alertingProfile: CD_send-to-car-service/alerting-profile/CDsend-to-car-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDsend-to-car-service-INT: +- name: CD_send-to-car-service INT +- alertingProfile: CD_send-to-car-service/alerting-profile/CDsend-to-car-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDsend-to-car-service-INT.EMEA-PreProd: +- name: CD_send-to-car-service INT +- alertingProfile: CD_send-to-car-service/alerting-profile/CDsend-to-car-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDsend-to-car-service-INT.NA-PreProd: +- name: CD_send-to-car-service INT +- alertingProfile: CD_send-to-car-service/alerting-profile/CDsend-to-car-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDsend-to-car-service-INT.CN-PreProd: +- name: CD_send-to-car-service INT +- alertingProfile: CD_send-to-car-service/alerting-profile/CDsend-to-car-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_send-to-car-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_send-to-car-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_send-to-car-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_send-to-car-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_send-to-car-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_send-to-car-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_send-to-car-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_send-to-car-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..819ee627 --- /dev/null +++ b/BMW-Dynatrace-config/CD_send-to-car-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- send-to-car-service: default.json + +send-to-car-service: +- name: CD_send-to-car-service - +- mzName: CD_send-to-car-service/management-zone/CDsend-to-car-service.name +- mzId: CD_send-to-car-service/management-zone/CDsend-to-car-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-manager/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_service-manager/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..b2b2f1b7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-manager/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDservice-manager-PROD: default.json +- CDservice-manager-E2E: default.json +- CDservice-manager-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDservice-manager-PROD: +- name: CD_service-manager PROD +- tag: service-manager +- mzId: CD_service-manager/management-zone/CDservice-manager.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDservice-manager-PROD.EMEA-Prod: +- name: CD_service-manager PROD +- tag: service-manager +- mzId: CD_service-manager/management-zone/CDservice-manager.id +- env: PROD +- skipDeployment: "false" +CDservice-manager-PROD.NA-Prod: +- name: CD_service-manager PROD +- tag: service-manager +- mzId: CD_service-manager/management-zone/CDservice-manager.id +- env: PROD +- skipDeployment: "false" +CDservice-manager-PROD.CN-Prod: +- name: CD_service-manager PROD +- tag: service-manager +- mzId: CD_service-manager/management-zone/CDservice-manager.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDservice-manager-E2E: +- name: CD_service-manager E2E +- tag: service-manager +- mzId: CD_service-manager/management-zone/CDservice-manager.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDservice-manager-E2E.EMEA-Prod: +- name: CD_service-manager E2E +- tag: service-manager +- mzId: CD_service-manager/management-zone/CDservice-manager.id +- env: E2E +- skipDeployment: "false" +CDservice-manager-E2E.NA-Prod: +- name: CD_service-manager E2E +- tag: service-manager +- mzId: CD_service-manager/management-zone/CDservice-manager.id +- env: E2E +- skipDeployment: "false" +CDservice-manager-E2E.CN-Prod: +- name: CD_service-manager E2E +- tag: service-manager +- mzId: CD_service-manager/management-zone/CDservice-manager.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDservice-manager-INT: +- name: CD_service-manager INT +- tag: service-manager +- mzId: CD_service-manager/management-zone/CDservice-manager.id +- env: INT +- skipDeployment: "true" +#Configuration +CDservice-manager-INT.EMEA-PreProd: +- name: CD_service-manager INT +- tag: service-manager +- mzId: CD_service-manager/management-zone/CDservice-manager.id +- env: INT +- skipDeployment: "false" +CDservice-manager-INT.NA-PreProd: +- name: CD_service-manager INT +- tag: service-manager +- mzId: CD_service-manager/management-zone/CDservice-manager.id +- env: INT +- skipDeployment: "false" +CDservice-manager-INT.CN-PreProd: +- name: CD_service-manager INT +- tag: service-manager +- mzId: CD_service-manager/management-zone/CDservice-manager.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-manager/alerting-profile/default.json b/BMW-Dynatrace-config/CD_service-manager/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-manager/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-manager/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_service-manager/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-manager/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-manager/custom-service-java/README.md b/BMW-Dynatrace-config/CD_service-manager/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-manager/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-manager/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_service-manager/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-manager/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-manager/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_service-manager/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-manager/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-manager/dashboard/README.md b/BMW-Dynatrace-config/CD_service-manager/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-manager/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-manager/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_service-manager/dashboard/dashboard.yaml new file mode 100644 index 00000000..5d8778cb --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-manager/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDservice-manager-PROD-E2E: defaultPRODE2E.json +- CDservice-manager-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDservice-manager-PROD-E2E: +- name: CD_service-manager PROD +- mzName: CD_service-manager/management-zone/CDservice-manager.name +- mzId: CD_service-manager/management-zone/CDservice-manager.id +- skipDeployment: "true" +#Configuration +CDservice-manager-PROD-E2E.EMEA-Prod: +- name: CD_service-manager PROD +- mzName: CD_service-manager/management-zone/CDservice-manager.name +- mzId: CD_service-manager/management-zone/CDservice-manager.id +- tag: service-manager +- skipDeployment: "false" +CDservice-manager-PROD-E2E.NA-Prod: +- name: CD_service-manager PROD +- mzName: CD_service-manager/management-zone/CDservice-manager.name +- mzId: CD_service-manager/management-zone/CDservice-manager.id +- tag: service-manager +- skipDeployment: "false" +CDservice-manager-PROD-E2E.CN-Prod: +- name: CD_service-manager PROD +- mzName: CD_service-manager/management-zone/CDservice-manager.name +- mzId: CD_service-manager/management-zone/CDservice-manager.id +- tag: service-manager +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDservice-manager-INT-TEST: +- name: CD_service-manager INT-TEST +- mzName: CD_service-manager/management-zone/CDservice-manager.name +- mzId: CD_service-manager/management-zone/CDservice-manager.id +- tag: service-manager +- skipDeployment: "true" +#Configuration +CDservice-manager-INT-TEST.EMEA-PreProd: +- name: CD_service-manager INT-TEST +- mzName: CD_service-manager/management-zone/CDservice-manager.name +- mzId: CD_service-manager/management-zone/CDservice-manager.id +- tag: service-manager +- skipDeployment: "false" +CDservice-manager-INT-TEST.NA-PreProd: +- name: CD_service-manager INT-TEST +- mzName: CD_service-manager/management-zone/CDservice-manager.name +- mzId: CD_service-manager/management-zone/CDservice-manager.id +- env: INT +- skipDeployment: "false" +CDservice-manager-INT-TEST.CN-PreProd: +- name: CD_service-manager INT-TEST +- mzName: CD_service-manager/management-zone/CDservice-manager.name +- mzId: CD_service-manager/management-zone/CDservice-manager.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-manager/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_service-manager/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-manager/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-manager/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_service-manager/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-manager/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-manager/management-zone/README.md b/BMW-Dynatrace-config/CD_service-manager/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-manager/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_service-manager/management-zone/default.json b/BMW-Dynatrace-config/CD_service-manager/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-manager/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-manager/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_service-manager/management-zone/management-zone.yaml new file mode 100644 index 00000000..d10011d8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-manager/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDservice-manager: default.json + +CDservice-manager: +- name: CD_service-manager +- tag: service-manager diff --git a/BMW-Dynatrace-config/CD_service-manager/notification/README.md b/BMW-Dynatrace-config/CD_service-manager/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-manager/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-manager/notification/email.json b/BMW-Dynatrace-config/CD_service-manager/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-manager/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-manager/notification/msTeams.json b/BMW-Dynatrace-config/CD_service-manager/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-manager/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-manager/notification/notification.yaml b/BMW-Dynatrace-config/CD_service-manager/notification/notification.yaml new file mode 100644 index 00000000..7322c744 --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-manager/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDservice-manager-PROD: msTeams.json +- CDservice-manager-E2E: msTeams.json +- CDservice-manager-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDservice-manager-PROD: +- name: CD_service-manager PROD +- alertingProfile: CD_service-manager/alerting-profile/CDservice-manager-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDservice-manager-PROD.EMEA-Prod: +- name: CD_service-manager PROD +- alertingProfile: CD_service-manager/alerting-profile/CDservice-manager-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDservice-manager-PROD.NA-Prod: +- name: CD_service-manager PROD +- alertingProfile: CD_service-manager/alerting-profile/CDservice-manager-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDservice-manager-PROD.CN-Prod: +- name: CD_service-manager PROD +- alertingProfile: CD_service-manager/alerting-profile/CDservice-manager-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDservice-manager-E2E: +- name: CD_service-manager E2E +- alertingProfile: CD_service-manager/alerting-profile/CDservice-manager-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDservice-manager-E2E.EMEA-Prod: +- name: CD_service-manager E2E +- alertingProfile: CD_service-manager/alerting-profile/CDservice-manager-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDservice-manager-E2E.NA-Prod: +- name: CD_service-manager E2E +- alertingProfile: CD_service-manager/alerting-profile/CDservice-manager-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDservice-manager-E2E.CN-Prod: +- name: CD_service-manager E2E +- alertingProfile: CD_service-manager/alerting-profile/CDservice-manager-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDservice-manager-INT: +- name: CD_service-manager INT +- alertingProfile: CD_service-manager/alerting-profile/CDservice-manager-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDservice-manager-INT.EMEA-PreProd: +- name: CD_service-manager INT +- alertingProfile: CD_service-manager/alerting-profile/CDservice-manager-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDservice-manager-INT.NA-PreProd: +- name: CD_service-manager INT +- alertingProfile: CD_service-manager/alerting-profile/CDservice-manager-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDservice-manager-INT.CN-PreProd: +- name: CD_service-manager INT +- alertingProfile: CD_service-manager/alerting-profile/CDservice-manager-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-manager/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_service-manager/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-manager/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-manager/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_service-manager/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-manager/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-manager/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_service-manager/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..ded543d6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-manager/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- service-manager: default.json + +service-manager: +- name: CD_service-manager - +- mzName: CD_service-manager/management-zone/CDservice-manager.name +- mzId: CD_service-manager/management-zone/CDservice-manager.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-notification-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_service-notification-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..ce2ccc67 --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-notification-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDservice-notification-service-PROD: default.json +- CDservice-notification-service-E2E: default.json +- CDservice-notification-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDservice-notification-service-PROD: +- name: CD_service-notification-service PROD +- tag: service-notification-service +- mzId: CD_service-notification-service/management-zone/CDservice-notification-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDservice-notification-service-PROD.EMEA-Prod: +- name: CD_service-notification-service PROD +- tag: service-notification-service +- mzId: CD_service-notification-service/management-zone/CDservice-notification-service.id +- env: PROD +- skipDeployment: "false" +CDservice-notification-service-PROD.NA-Prod: +- name: CD_service-notification-service PROD +- tag: service-notification-service +- mzId: CD_service-notification-service/management-zone/CDservice-notification-service.id +- env: PROD +- skipDeployment: "false" +CDservice-notification-service-PROD.CN-Prod: +- name: CD_service-notification-service PROD +- tag: service-notification-service +- mzId: CD_service-notification-service/management-zone/CDservice-notification-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDservice-notification-service-E2E: +- name: CD_service-notification-service E2E +- tag: service-notification-service +- mzId: CD_service-notification-service/management-zone/CDservice-notification-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDservice-notification-service-E2E.EMEA-Prod: +- name: CD_service-notification-service E2E +- tag: service-notification-service +- mzId: CD_service-notification-service/management-zone/CDservice-notification-service.id +- env: E2E +- skipDeployment: "false" +CDservice-notification-service-E2E.NA-Prod: +- name: CD_service-notification-service E2E +- tag: service-notification-service +- mzId: CD_service-notification-service/management-zone/CDservice-notification-service.id +- env: E2E +- skipDeployment: "false" +CDservice-notification-service-E2E.CN-Prod: +- name: CD_service-notification-service E2E +- tag: service-notification-service +- mzId: CD_service-notification-service/management-zone/CDservice-notification-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDservice-notification-service-INT: +- name: CD_service-notification-service INT +- tag: service-notification-service +- mzId: CD_service-notification-service/management-zone/CDservice-notification-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDservice-notification-service-INT.EMEA-PreProd: +- name: CD_service-notification-service INT +- tag: service-notification-service +- mzId: CD_service-notification-service/management-zone/CDservice-notification-service.id +- env: INT +- skipDeployment: "false" +CDservice-notification-service-INT.NA-PreProd: +- name: CD_service-notification-service INT +- tag: service-notification-service +- mzId: CD_service-notification-service/management-zone/CDservice-notification-service.id +- env: INT +- skipDeployment: "false" +CDservice-notification-service-INT.CN-PreProd: +- name: CD_service-notification-service INT +- tag: service-notification-service +- mzId: CD_service-notification-service/management-zone/CDservice-notification-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-notification-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_service-notification-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-notification-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-notification-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_service-notification-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-notification-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-notification-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_service-notification-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-notification-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-notification-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_service-notification-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-notification-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-notification-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_service-notification-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-notification-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-notification-service/dashboard/README.md b/BMW-Dynatrace-config/CD_service-notification-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-notification-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-notification-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_service-notification-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..65cb6793 --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-notification-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDservice-notification-service-PROD-E2E: defaultPRODE2E.json +- CDservice-notification-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDservice-notification-service-PROD-E2E: +- name: CD_service-notification-service PROD +- mzName: CD_service-notification-service/management-zone/CDservice-notification-service.name +- mzId: CD_service-notification-service/management-zone/CDservice-notification-service.id +- skipDeployment: "true" +#Configuration +CDservice-notification-service-PROD-E2E.EMEA-Prod: +- name: CD_service-notification-service PROD +- mzName: CD_service-notification-service/management-zone/CDservice-notification-service.name +- mzId: CD_service-notification-service/management-zone/CDservice-notification-service.id +- tag: service-notification-service +- skipDeployment: "false" +CDservice-notification-service-PROD-E2E.NA-Prod: +- name: CD_service-notification-service PROD +- mzName: CD_service-notification-service/management-zone/CDservice-notification-service.name +- mzId: CD_service-notification-service/management-zone/CDservice-notification-service.id +- tag: service-notification-service +- skipDeployment: "false" +CDservice-notification-service-PROD-E2E.CN-Prod: +- name: CD_service-notification-service PROD +- mzName: CD_service-notification-service/management-zone/CDservice-notification-service.name +- mzId: CD_service-notification-service/management-zone/CDservice-notification-service.id +- tag: service-notification-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDservice-notification-service-INT-TEST: +- name: CD_service-notification-service INT-TEST +- mzName: CD_service-notification-service/management-zone/CDservice-notification-service.name +- mzId: CD_service-notification-service/management-zone/CDservice-notification-service.id +- tag: service-notification-service +- skipDeployment: "true" +#Configuration +CDservice-notification-service-INT-TEST.EMEA-PreProd: +- name: CD_service-notification-service INT-TEST +- mzName: CD_service-notification-service/management-zone/CDservice-notification-service.name +- mzId: CD_service-notification-service/management-zone/CDservice-notification-service.id +- tag: service-notification-service +- skipDeployment: "false" +CDservice-notification-service-INT-TEST.NA-PreProd: +- name: CD_service-notification-service INT-TEST +- mzName: CD_service-notification-service/management-zone/CDservice-notification-service.name +- mzId: CD_service-notification-service/management-zone/CDservice-notification-service.id +- env: INT +- skipDeployment: "false" +CDservice-notification-service-INT-TEST.CN-PreProd: +- name: CD_service-notification-service INT-TEST +- mzName: CD_service-notification-service/management-zone/CDservice-notification-service.name +- mzId: CD_service-notification-service/management-zone/CDservice-notification-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-notification-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_service-notification-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-notification-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-notification-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_service-notification-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-notification-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-notification-service/management-zone/README.md b/BMW-Dynatrace-config/CD_service-notification-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-notification-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_service-notification-service/management-zone/default.json b/BMW-Dynatrace-config/CD_service-notification-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-notification-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-notification-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_service-notification-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..5dd5473d --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-notification-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDservice-notification-service: default.json + +CDservice-notification-service: +- name: CD_service-notification-service +- tag: service-notification-service diff --git a/BMW-Dynatrace-config/CD_service-notification-service/notification/README.md b/BMW-Dynatrace-config/CD_service-notification-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-notification-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-notification-service/notification/email.json b/BMW-Dynatrace-config/CD_service-notification-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-notification-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-notification-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_service-notification-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-notification-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-notification-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_service-notification-service/notification/notification.yaml new file mode 100644 index 00000000..5ffbe8a3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-notification-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDservice-notification-service-PROD: msTeams.json +- CDservice-notification-service-E2E: msTeams.json +- CDservice-notification-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDservice-notification-service-PROD: +- name: CD_service-notification-service PROD +- alertingProfile: CD_service-notification-service/alerting-profile/CDservice-notification-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDservice-notification-service-PROD.EMEA-Prod: +- name: CD_service-notification-service PROD +- alertingProfile: CD_service-notification-service/alerting-profile/CDservice-notification-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDservice-notification-service-PROD.NA-Prod: +- name: CD_service-notification-service PROD +- alertingProfile: CD_service-notification-service/alerting-profile/CDservice-notification-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDservice-notification-service-PROD.CN-Prod: +- name: CD_service-notification-service PROD +- alertingProfile: CD_service-notification-service/alerting-profile/CDservice-notification-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDservice-notification-service-E2E: +- name: CD_service-notification-service E2E +- alertingProfile: CD_service-notification-service/alerting-profile/CDservice-notification-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDservice-notification-service-E2E.EMEA-Prod: +- name: CD_service-notification-service E2E +- alertingProfile: CD_service-notification-service/alerting-profile/CDservice-notification-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDservice-notification-service-E2E.NA-Prod: +- name: CD_service-notification-service E2E +- alertingProfile: CD_service-notification-service/alerting-profile/CDservice-notification-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDservice-notification-service-E2E.CN-Prod: +- name: CD_service-notification-service E2E +- alertingProfile: CD_service-notification-service/alerting-profile/CDservice-notification-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDservice-notification-service-INT: +- name: CD_service-notification-service INT +- alertingProfile: CD_service-notification-service/alerting-profile/CDservice-notification-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDservice-notification-service-INT.EMEA-PreProd: +- name: CD_service-notification-service INT +- alertingProfile: CD_service-notification-service/alerting-profile/CDservice-notification-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDservice-notification-service-INT.NA-PreProd: +- name: CD_service-notification-service INT +- alertingProfile: CD_service-notification-service/alerting-profile/CDservice-notification-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDservice-notification-service-INT.CN-PreProd: +- name: CD_service-notification-service INT +- alertingProfile: CD_service-notification-service/alerting-profile/CDservice-notification-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-notification-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_service-notification-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-notification-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-notification-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_service-notification-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-notification-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-notification-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_service-notification-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..a13bdd93 --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-notification-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- service-notification-service: default.json + +service-notification-service: +- name: CD_service-notification-service - +- mzName: CD_service-notification-service/management-zone/CDservice-notification-service.name +- mzId: CD_service-notification-service/management-zone/CDservice-notification-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-fre/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_sfa-fre/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..a5594b26 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-fre/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDsfa-fre-PROD: default.json +- CDsfa-fre-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDsfa-fre-PROD: +- name: CD_sfa-fre PROD +- tag: sfa-fre +- mzId: CD_sfa-fre/management-zone/CDsfa-fre.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDsfa-fre-PROD.EMEA-Prod: +- name: CD_sfa-fre PROD +- tag: sfa-fre +- mzId: CD_sfa-fre/management-zone/CDsfa-fre.id +- env: PROD +- skipDeployment: "false" +CDsfa-fre-PROD.NA-Prod: +- name: CD_sfa-fre PROD +- tag: sfa-fre +- mzId: CD_sfa-fre/management-zone/CDsfa-fre.id +- env: PROD +- skipDeployment: "false" +CDsfa-fre-PROD.CN-Prod: +- name: CD_sfa-fre PROD +- tag: sfa-fre +- mzId: CD_sfa-fre/management-zone/CDsfa-fre.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDsfa-fre-INT: +- name: CD_sfa-fre INT +- tag: sfa-fre +- mzId: CD_sfa-fre/management-zone/CDsfa-fre.id +- env: INT +- skipDeployment: "true" +#Configuration +CDsfa-fre-INT.EMEA-PreProd: +- name: CD_sfa-fre INT +- tag: sfa-fre +- mzId: CD_sfa-fre/management-zone/CDsfa-fre.id +- env: INT +- skipDeployment: "false" +CDsfa-fre-INT.NA-PreProd: +- name: CD_sfa-fre INT +- tag: sfa-fre +- mzId: CD_sfa-fre/management-zone/CDsfa-fre.id +- env: INT +- skipDeployment: "false" +CDsfa-fre-INT.CN-PreProd: +- name: CD_sfa-fre INT +- tag: sfa-fre +- mzId: CD_sfa-fre/management-zone/CDsfa-fre.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-fre/alerting-profile/default.json b/BMW-Dynatrace-config/CD_sfa-fre/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-fre/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-fre/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_sfa-fre/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-fre/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-fre/custom-service-java/README.md b/BMW-Dynatrace-config/CD_sfa-fre/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-fre/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-fre/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_sfa-fre/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-fre/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-fre/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_sfa-fre/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-fre/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-fre/dashboard/README.md b/BMW-Dynatrace-config/CD_sfa-fre/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-fre/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-fre/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_sfa-fre/dashboard/dashboard.yaml new file mode 100644 index 00000000..014ea8db --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-fre/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDsfa-fre-PROD-E2E: defaultPRODE2E.json +- CDsfa-fre-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDsfa-fre-PROD-E2E: +- name: CD_sfa-fre PROD-E2E +- mzName: CD_sfa-fre/management-zone/CDsfa-fre.name +- mzId: CD_sfa-fre/management-zone/CDsfa-fre.id +- skipDeployment: "true" +#Configuration +CDsfa-fre-PROD-E2E.EMEA-Prod: +- name: CD_sfa-fre PROD-E2E +- mzName: CD_sfa-fre/management-zone/CDsfa-fre.name +- mzId: CD_sfa-fre/management-zone/CDsfa-fre.id +- tag: sfa-fre +- skipDeployment: "false" +CDsfa-fre-PROD-E2E.NA-Prod: +- name: CD_sfa-fre PROD-E2E +- mzName: CD_sfa-fre/management-zone/CDsfa-fre.name +- mzId: CD_sfa-fre/management-zone/CDsfa-fre.id +- tag: sfa-fre +- skipDeployment: "false" +CDsfa-fre-PROD-E2E.CN-Prod: +- name: CD_sfa-fre PROD-E2E +- mzName: CD_sfa-fre/management-zone/CDsfa-fre.name +- mzId: CD_sfa-fre/management-zone/CDsfa-fre.id +- tag: sfa-fre +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDsfa-fre-INT-TEST: +- name: CD_sfa-fre INT-TEST +- mzName: CD_sfa-fre/management-zone/CDsfa-fre.name +- mzId: CD_sfa-fre/management-zone/CDsfa-fre.id +- tag: sfa-fre +- skipDeployment: "true" +#Configuration +CDsfa-fre-INT-TEST.EMEA-PreProd: +- name: CD_sfa-fre INT-TEST +- mzName: CD_sfa-fre/management-zone/CDsfa-fre.name +- mzId: CD_sfa-fre/management-zone/CDsfa-fre.id +- tag: sfa-fre +- skipDeployment: "false" +CDsfa-fre-INT-TEST.NA-PreProd: +- name: CD_sfa-fre INT-TEST +- mzName: CD_sfa-fre/management-zone/CDsfa-fre.name +- mzId: CD_sfa-fre/management-zone/CDsfa-fre.id +- env: INT +- skipDeployment: "false" +CDsfa-fre-INT-TEST.CN-PreProd: +- name: CD_sfa-fre INT-TEST +- mzName: CD_sfa-fre/management-zone/CDsfa-fre.name +- mzId: CD_sfa-fre/management-zone/CDsfa-fre.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-fre/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_sfa-fre/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-fre/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-fre/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_sfa-fre/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-fre/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-fre/management-zone/README.md b/BMW-Dynatrace-config/CD_sfa-fre/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-fre/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_sfa-fre/management-zone/default.json b/BMW-Dynatrace-config/CD_sfa-fre/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-fre/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-fre/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_sfa-fre/management-zone/management-zone.yaml new file mode 100644 index 00000000..73154148 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-fre/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDsfa-fre: default.json + +CDsfa-fre: +- name: CD_sfa-fre +- tag: sfa-fre diff --git a/BMW-Dynatrace-config/CD_sfa-fre/notification/README.md b/BMW-Dynatrace-config/CD_sfa-fre/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-fre/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-fre/notification/email.json b/BMW-Dynatrace-config/CD_sfa-fre/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-fre/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-fre/notification/msTeams.json b/BMW-Dynatrace-config/CD_sfa-fre/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-fre/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-fre/notification/notification.yaml b/BMW-Dynatrace-config/CD_sfa-fre/notification/notification.yaml new file mode 100644 index 00000000..db4aea27 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-fre/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDsfa-fre-PROD: msTeams.json +- CDsfa-fre-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDsfa-fre-PROD: +- name: CD_sfa-fre PROD +- alertingProfile: CD_sfa-fre/alerting-profile/CDsfa-fre-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDsfa-fre-PROD.EMEA-Prod: +- name: CD_sfa-fre PROD +- alertingProfile: CD_sfa-fre/alerting-profile/CDsfa-fre-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDsfa-fre-PROD.NA-Prod: +- name: CD_sfa-fre PROD +- alertingProfile: CD_sfa-fre/alerting-profile/CDsfa-fre-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDsfa-fre-PROD.CN-Prod: +- name: CD_sfa-fre PROD +- alertingProfile: CD_sfa-fre/alerting-profile/CDsfa-fre-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDsfa-fre-INT: +- name: CD_sfa-fre INT +- alertingProfile: CD_sfa-fre/alerting-profile/CDsfa-fre-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDsfa-fre-INT.EMEA-PreProd: +- name: CD_sfa-fre INT +- alertingProfile: CD_sfa-fre/alerting-profile/CDsfa-fre-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDsfa-fre-INT.NA-PreProd: +- name: CD_sfa-fre INT +- alertingProfile: CD_sfa-fre/alerting-profile/CDsfa-fre-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDsfa-fre-INT.CN-PreProd: +- name: CD_sfa-fre INT +- alertingProfile: CD_sfa-fre/alerting-profile/CDsfa-fre-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-fre/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_sfa-fre/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-fre/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-fre/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_sfa-fre/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-fre/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-fre/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_sfa-fre/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..aa7128d9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-fre/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- sfa-fre: default.json + +sfa-fre: +- name: CD_sfa-fre - +- mzName: CD_sfa-fre/management-zone/CDsfa-fre.name +- mzId: CD_sfa-fre/management-zone/CDsfa-fre.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-ota/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_sfa-ota/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..74a5e6d4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-ota/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDsfa-ota-PROD: default.json +- CDsfa-ota-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDsfa-ota-PROD: +- name: CD_sfa-ota PROD +- tag: sfa-ota +- mzId: CD_sfa-ota/management-zone/CDsfa-ota.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDsfa-ota-PROD.EMEA-Prod: +- name: CD_sfa-ota PROD +- tag: sfa-ota +- mzId: CD_sfa-ota/management-zone/CDsfa-ota.id +- env: PROD +- skipDeployment: "false" +CDsfa-ota-PROD.NA-Prod: +- name: CD_sfa-ota PROD +- tag: sfa-ota +- mzId: CD_sfa-ota/management-zone/CDsfa-ota.id +- env: PROD +- skipDeployment: "false" +CDsfa-ota-PROD.CN-Prod: +- name: CD_sfa-ota PROD +- tag: sfa-ota +- mzId: CD_sfa-ota/management-zone/CDsfa-ota.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDsfa-ota-INT: +- name: CD_sfa-ota INT +- tag: sfa-ota +- mzId: CD_sfa-ota/management-zone/CDsfa-ota.id +- env: INT +- skipDeployment: "true" +#Configuration +CDsfa-ota-INT.EMEA-PreProd: +- name: CD_sfa-ota INT +- tag: sfa-ota +- mzId: CD_sfa-ota/management-zone/CDsfa-ota.id +- env: INT +- skipDeployment: "false" +CDsfa-ota-INT.NA-PreProd: +- name: CD_sfa-ota INT +- tag: sfa-ota +- mzId: CD_sfa-ota/management-zone/CDsfa-ota.id +- env: INT +- skipDeployment: "false" +CDsfa-ota-INT.CN-PreProd: +- name: CD_sfa-ota INT +- tag: sfa-ota +- mzId: CD_sfa-ota/management-zone/CDsfa-ota.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-ota/alerting-profile/default.json b/BMW-Dynatrace-config/CD_sfa-ota/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-ota/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-ota/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_sfa-ota/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-ota/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-ota/custom-service-java/README.md b/BMW-Dynatrace-config/CD_sfa-ota/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-ota/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-ota/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_sfa-ota/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-ota/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-ota/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_sfa-ota/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-ota/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-ota/dashboard/README.md b/BMW-Dynatrace-config/CD_sfa-ota/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-ota/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-ota/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_sfa-ota/dashboard/dashboard.yaml new file mode 100644 index 00000000..80e7c856 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-ota/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDsfa-ota-PROD-E2E: defaultPRODE2E.json +- CDsfa-ota-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDsfa-ota-PROD-E2E: +- name: CD_sfa-ota PROD-E2E +- mzName: CD_sfa-ota/management-zone/CDsfa-ota.name +- mzId: CD_sfa-ota/management-zone/CDsfa-ota.id +- skipDeployment: "true" +#Configuration +CDsfa-ota-PROD-E2E.EMEA-Prod: +- name: CD_sfa-ota PROD-E2E +- mzName: CD_sfa-ota/management-zone/CDsfa-ota.name +- mzId: CD_sfa-ota/management-zone/CDsfa-ota.id +- tag: sfa-ota +- skipDeployment: "false" +CDsfa-ota-PROD-E2E.NA-Prod: +- name: CD_sfa-ota PROD-E2E +- mzName: CD_sfa-ota/management-zone/CDsfa-ota.name +- mzId: CD_sfa-ota/management-zone/CDsfa-ota.id +- tag: sfa-ota +- skipDeployment: "false" +CDsfa-ota-PROD-E2E.CN-Prod: +- name: CD_sfa-ota PROD-E2E +- mzName: CD_sfa-ota/management-zone/CDsfa-ota.name +- mzId: CD_sfa-ota/management-zone/CDsfa-ota.id +- tag: sfa-ota +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDsfa-ota-INT-TEST: +- name: CD_sfa-ota INT-TEST +- mzName: CD_sfa-ota/management-zone/CDsfa-ota.name +- mzId: CD_sfa-ota/management-zone/CDsfa-ota.id +- tag: sfa-ota +- skipDeployment: "true" +#Configuration +CDsfa-ota-INT-TEST.EMEA-PreProd: +- name: CD_sfa-ota INT-TEST +- mzName: CD_sfa-ota/management-zone/CDsfa-ota.name +- mzId: CD_sfa-ota/management-zone/CDsfa-ota.id +- tag: sfa-ota +- skipDeployment: "false" +CDsfa-ota-INT-TEST.NA-PreProd: +- name: CD_sfa-ota INT-TEST +- mzName: CD_sfa-ota/management-zone/CDsfa-ota.name +- mzId: CD_sfa-ota/management-zone/CDsfa-ota.id +- env: INT +- skipDeployment: "false" +CDsfa-ota-INT-TEST.CN-PreProd: +- name: CD_sfa-ota INT-TEST +- mzName: CD_sfa-ota/management-zone/CDsfa-ota.name +- mzId: CD_sfa-ota/management-zone/CDsfa-ota.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-ota/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_sfa-ota/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-ota/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-ota/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_sfa-ota/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-ota/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-ota/management-zone/README.md b/BMW-Dynatrace-config/CD_sfa-ota/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-ota/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_sfa-ota/management-zone/default.json b/BMW-Dynatrace-config/CD_sfa-ota/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-ota/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-ota/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_sfa-ota/management-zone/management-zone.yaml new file mode 100644 index 00000000..a3c45930 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-ota/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDsfa-ota: default.json + +CDsfa-ota: +- name: CD_sfa-ota +- tag: sfa-ota diff --git a/BMW-Dynatrace-config/CD_sfa-ota/notification/README.md b/BMW-Dynatrace-config/CD_sfa-ota/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-ota/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-ota/notification/email.json b/BMW-Dynatrace-config/CD_sfa-ota/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-ota/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-ota/notification/msTeams.json b/BMW-Dynatrace-config/CD_sfa-ota/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-ota/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-ota/notification/notification.yaml b/BMW-Dynatrace-config/CD_sfa-ota/notification/notification.yaml new file mode 100644 index 00000000..d6de5894 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-ota/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDsfa-ota-PROD: msTeams.json +- CDsfa-ota-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDsfa-ota-PROD: +- name: CD_sfa-ota PROD +- alertingProfile: CD_sfa-ota/alerting-profile/CDsfa-ota-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDsfa-ota-PROD.EMEA-Prod: +- name: CD_sfa-ota PROD +- alertingProfile: CD_sfa-ota/alerting-profile/CDsfa-ota-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDsfa-ota-PROD.NA-Prod: +- name: CD_sfa-ota PROD +- alertingProfile: CD_sfa-ota/alerting-profile/CDsfa-ota-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDsfa-ota-PROD.CN-Prod: +- name: CD_sfa-ota PROD +- alertingProfile: CD_sfa-ota/alerting-profile/CDsfa-ota-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDsfa-ota-INT: +- name: CD_sfa-ota INT +- alertingProfile: CD_sfa-ota/alerting-profile/CDsfa-ota-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDsfa-ota-INT.EMEA-PreProd: +- name: CD_sfa-ota INT +- alertingProfile: CD_sfa-ota/alerting-profile/CDsfa-ota-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDsfa-ota-INT.NA-PreProd: +- name: CD_sfa-ota INT +- alertingProfile: CD_sfa-ota/alerting-profile/CDsfa-ota-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDsfa-ota-INT.CN-PreProd: +- name: CD_sfa-ota INT +- alertingProfile: CD_sfa-ota/alerting-profile/CDsfa-ota-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-ota/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_sfa-ota/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-ota/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-ota/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_sfa-ota/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-ota/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-ota/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_sfa-ota/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..f0e2ece6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-ota/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- sfa-ota: default.json + +sfa-ota: +- name: CD_sfa-ota - +- mzName: CD_sfa-ota/management-zone/CDsfa-ota.name +- mzId: CD_sfa-ota/management-zone/CDsfa-ota.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-vs/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_sfa-vs/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..fa2f0665 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-vs/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDsfa-vs-PROD: default.json +- CDsfa-vs-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDsfa-vs-PROD: +- name: CD_sfa-vs PROD +- tag: sfa-vs +- mzId: CD_sfa-vs/management-zone/CDsfa-vs.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDsfa-vs-PROD.EMEA-Prod: +- name: CD_sfa-vs PROD +- tag: sfa-vs +- mzId: CD_sfa-vs/management-zone/CDsfa-vs.id +- env: PROD +- skipDeployment: "false" +CDsfa-vs-PROD.NA-Prod: +- name: CD_sfa-vs PROD +- tag: sfa-vs +- mzId: CD_sfa-vs/management-zone/CDsfa-vs.id +- env: PROD +- skipDeployment: "false" +CDsfa-vs-PROD.CN-Prod: +- name: CD_sfa-vs PROD +- tag: sfa-vs +- mzId: CD_sfa-vs/management-zone/CDsfa-vs.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDsfa-vs-INT: +- name: CD_sfa-vs INT +- tag: sfa-vs +- mzId: CD_sfa-vs/management-zone/CDsfa-vs.id +- env: INT +- skipDeployment: "true" +#Configuration +CDsfa-vs-INT.EMEA-PreProd: +- name: CD_sfa-vs INT +- tag: sfa-vs +- mzId: CD_sfa-vs/management-zone/CDsfa-vs.id +- env: INT +- skipDeployment: "false" +CDsfa-vs-INT.NA-PreProd: +- name: CD_sfa-vs INT +- tag: sfa-vs +- mzId: CD_sfa-vs/management-zone/CDsfa-vs.id +- env: INT +- skipDeployment: "false" +CDsfa-vs-INT.CN-PreProd: +- name: CD_sfa-vs INT +- tag: sfa-vs +- mzId: CD_sfa-vs/management-zone/CDsfa-vs.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-vs/alerting-profile/default.json b/BMW-Dynatrace-config/CD_sfa-vs/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-vs/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-vs/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_sfa-vs/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-vs/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-vs/custom-service-java/README.md b/BMW-Dynatrace-config/CD_sfa-vs/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-vs/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-vs/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_sfa-vs/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-vs/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-vs/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_sfa-vs/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-vs/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-vs/dashboard/README.md b/BMW-Dynatrace-config/CD_sfa-vs/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-vs/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-vs/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_sfa-vs/dashboard/dashboard.yaml new file mode 100644 index 00000000..a2605b0a --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-vs/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDsfa-vs-PROD-E2E: defaultPRODE2E.json +- CDsfa-vs-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDsfa-vs-PROD-E2E: +- name: CD_sfa-vs PROD-E2E +- mzName: CD_sfa-vs/management-zone/CDsfa-vs.name +- mzId: CD_sfa-vs/management-zone/CDsfa-vs.id +- skipDeployment: "true" +#Configuration +CDsfa-vs-PROD-E2E.EMEA-Prod: +- name: CD_sfa-vs PROD-E2E +- mzName: CD_sfa-vs/management-zone/CDsfa-vs.name +- mzId: CD_sfa-vs/management-zone/CDsfa-vs.id +- tag: sfa-vs +- skipDeployment: "false" +CDsfa-vs-PROD-E2E.NA-Prod: +- name: CD_sfa-vs PROD-E2E +- mzName: CD_sfa-vs/management-zone/CDsfa-vs.name +- mzId: CD_sfa-vs/management-zone/CDsfa-vs.id +- tag: sfa-vs +- skipDeployment: "false" +CDsfa-vs-PROD-E2E.CN-Prod: +- name: CD_sfa-vs PROD-E2E +- mzName: CD_sfa-vs/management-zone/CDsfa-vs.name +- mzId: CD_sfa-vs/management-zone/CDsfa-vs.id +- tag: sfa-vs +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDsfa-vs-INT-TEST: +- name: CD_sfa-vs INT-TEST +- mzName: CD_sfa-vs/management-zone/CDsfa-vs.name +- mzId: CD_sfa-vs/management-zone/CDsfa-vs.id +- tag: sfa-vs +- skipDeployment: "true" +#Configuration +CDsfa-vs-INT-TEST.EMEA-PreProd: +- name: CD_sfa-vs INT-TEST +- mzName: CD_sfa-vs/management-zone/CDsfa-vs.name +- mzId: CD_sfa-vs/management-zone/CDsfa-vs.id +- tag: sfa-vs +- skipDeployment: "false" +CDsfa-vs-INT-TEST.NA-PreProd: +- name: CD_sfa-vs INT-TEST +- mzName: CD_sfa-vs/management-zone/CDsfa-vs.name +- mzId: CD_sfa-vs/management-zone/CDsfa-vs.id +- env: INT +- skipDeployment: "false" +CDsfa-vs-INT-TEST.CN-PreProd: +- name: CD_sfa-vs INT-TEST +- mzName: CD_sfa-vs/management-zone/CDsfa-vs.name +- mzId: CD_sfa-vs/management-zone/CDsfa-vs.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-vs/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_sfa-vs/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-vs/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-vs/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_sfa-vs/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-vs/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-vs/management-zone/README.md b/BMW-Dynatrace-config/CD_sfa-vs/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-vs/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_sfa-vs/management-zone/default.json b/BMW-Dynatrace-config/CD_sfa-vs/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-vs/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-vs/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_sfa-vs/management-zone/management-zone.yaml new file mode 100644 index 00000000..945631e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-vs/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDsfa-vs: default.json + +CDsfa-vs: +- name: CD_sfa-vs +- tag: sfa-vs diff --git a/BMW-Dynatrace-config/CD_sfa-vs/notification/README.md b/BMW-Dynatrace-config/CD_sfa-vs/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-vs/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-vs/notification/email.json b/BMW-Dynatrace-config/CD_sfa-vs/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-vs/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-vs/notification/msTeams.json b/BMW-Dynatrace-config/CD_sfa-vs/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-vs/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-vs/notification/notification.yaml b/BMW-Dynatrace-config/CD_sfa-vs/notification/notification.yaml new file mode 100644 index 00000000..3d6758ab --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-vs/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDsfa-vs-PROD: msTeams.json +- CDsfa-vs-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDsfa-vs-PROD: +- name: CD_sfa-vs PROD +- alertingProfile: CD_sfa-vs/alerting-profile/CDsfa-vs-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDsfa-vs-PROD.EMEA-Prod: +- name: CD_sfa-vs PROD +- alertingProfile: CD_sfa-vs/alerting-profile/CDsfa-vs-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDsfa-vs-PROD.NA-Prod: +- name: CD_sfa-vs PROD +- alertingProfile: CD_sfa-vs/alerting-profile/CDsfa-vs-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDsfa-vs-PROD.CN-Prod: +- name: CD_sfa-vs PROD +- alertingProfile: CD_sfa-vs/alerting-profile/CDsfa-vs-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDsfa-vs-INT: +- name: CD_sfa-vs INT +- alertingProfile: CD_sfa-vs/alerting-profile/CDsfa-vs-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDsfa-vs-INT.EMEA-PreProd: +- name: CD_sfa-vs INT +- alertingProfile: CD_sfa-vs/alerting-profile/CDsfa-vs-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDsfa-vs-INT.NA-PreProd: +- name: CD_sfa-vs INT +- alertingProfile: CD_sfa-vs/alerting-profile/CDsfa-vs-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDsfa-vs-INT.CN-PreProd: +- name: CD_sfa-vs INT +- alertingProfile: CD_sfa-vs/alerting-profile/CDsfa-vs-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-vs/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_sfa-vs/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-vs/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-vs/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_sfa-vs/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-vs/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-vs/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_sfa-vs/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..73afd506 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-vs/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- sfa-vs: default.json + +sfa-vs: +- name: CD_sfa-vs - +- mzName: CD_sfa-vs/management-zone/CDsfa-vs.name +- mzId: CD_sfa-vs/management-zone/CDsfa-vs.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_sfa/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..2173671a --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDsfa-PROD: default.json +- CDsfa-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDsfa-PROD: +- name: CD_sfa PROD +- tag: sfa +- mzId: CD_sfa/management-zone/CDsfa.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDsfa-PROD.EMEA-Prod: +- name: CD_sfa PROD +- tag: sfa +- mzId: CD_sfa/management-zone/CDsfa.id +- env: PROD +- skipDeployment: "false" +CDsfa-PROD.NA-Prod: +- name: CD_sfa PROD +- tag: sfa +- mzId: CD_sfa/management-zone/CDsfa.id +- env: PROD +- skipDeployment: "false" +CDsfa-PROD.CN-Prod: +- name: CD_sfa PROD +- tag: sfa +- mzId: CD_sfa/management-zone/CDsfa.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDsfa-INT: +- name: CD_sfa INT +- tag: sfa +- mzId: CD_sfa/management-zone/CDsfa.id +- env: INT +- skipDeployment: "true" +#Configuration +CDsfa-INT.EMEA-PreProd: +- name: CD_sfa INT +- tag: sfa +- mzId: CD_sfa/management-zone/CDsfa.id +- env: INT +- skipDeployment: "false" +CDsfa-INT.NA-PreProd: +- name: CD_sfa INT +- tag: sfa +- mzId: CD_sfa/management-zone/CDsfa.id +- env: INT +- skipDeployment: "false" +CDsfa-INT.CN-PreProd: +- name: CD_sfa INT +- tag: sfa +- mzId: CD_sfa/management-zone/CDsfa.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa/alerting-profile/default.json b/BMW-Dynatrace-config/CD_sfa/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_sfa/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa/custom-service-java/README.md b/BMW-Dynatrace-config/CD_sfa/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_sfa/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_sfa/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa/dashboard/README.md b/BMW-Dynatrace-config/CD_sfa/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_sfa/dashboard/dashboard.yaml new file mode 100644 index 00000000..9a4e7479 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDsfa-PROD-E2E: defaultPRODE2E.json +- CDsfa-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDsfa-PROD-E2E: +- name: CD_sfa PROD-E2E +- mzName: CD_sfa/management-zone/CDsfa.name +- mzId: CD_sfa/management-zone/CDsfa.id +- skipDeployment: "true" +#Configuration +CDsfa-PROD-E2E.EMEA-Prod: +- name: CD_sfa PROD-E2E +- mzName: CD_sfa/management-zone/CDsfa.name +- mzId: CD_sfa/management-zone/CDsfa.id +- tag: sfa +- skipDeployment: "false" +CDsfa-PROD-E2E.NA-Prod: +- name: CD_sfa PROD-E2E +- mzName: CD_sfa/management-zone/CDsfa.name +- mzId: CD_sfa/management-zone/CDsfa.id +- tag: sfa +- skipDeployment: "false" +CDsfa-PROD-E2E.CN-Prod: +- name: CD_sfa PROD-E2E +- mzName: CD_sfa/management-zone/CDsfa.name +- mzId: CD_sfa/management-zone/CDsfa.id +- tag: sfa +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDsfa-INT-TEST: +- name: CD_sfa INT-TEST +- mzName: CD_sfa/management-zone/CDsfa.name +- mzId: CD_sfa/management-zone/CDsfa.id +- tag: sfa +- skipDeployment: "true" +#Configuration +CDsfa-INT-TEST.EMEA-PreProd: +- name: CD_sfa INT-TEST +- mzName: CD_sfa/management-zone/CDsfa.name +- mzId: CD_sfa/management-zone/CDsfa.id +- tag: sfa +- skipDeployment: "false" +CDsfa-INT-TEST.NA-PreProd: +- name: CD_sfa INT-TEST +- mzName: CD_sfa/management-zone/CDsfa.name +- mzId: CD_sfa/management-zone/CDsfa.id +- env: INT +- skipDeployment: "false" +CDsfa-INT-TEST.CN-PreProd: +- name: CD_sfa INT-TEST +- mzName: CD_sfa/management-zone/CDsfa.name +- mzId: CD_sfa/management-zone/CDsfa.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_sfa/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_sfa/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa/management-zone/README.md b/BMW-Dynatrace-config/CD_sfa/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_sfa/management-zone/default.json b/BMW-Dynatrace-config/CD_sfa/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_sfa/management-zone/management-zone.yaml new file mode 100644 index 00000000..258360cf --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDsfa: default.json + +CDsfa: +- name: CD_sfa +- tag: sfa diff --git a/BMW-Dynatrace-config/CD_sfa/notification/README.md b/BMW-Dynatrace-config/CD_sfa/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa/notification/email.json b/BMW-Dynatrace-config/CD_sfa/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa/notification/msTeams.json b/BMW-Dynatrace-config/CD_sfa/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa/notification/notification.yaml b/BMW-Dynatrace-config/CD_sfa/notification/notification.yaml new file mode 100644 index 00000000..729e4c42 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDsfa-PROD: msTeams.json +- CDsfa-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDsfa-PROD: +- name: CD_sfa PROD +- alertingProfile: CD_sfa/alerting-profile/CDsfa-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDsfa-PROD.EMEA-Prod: +- name: CD_sfa PROD +- alertingProfile: CD_sfa/alerting-profile/CDsfa-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDsfa-PROD.NA-Prod: +- name: CD_sfa PROD +- alertingProfile: CD_sfa/alerting-profile/CDsfa-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDsfa-PROD.CN-Prod: +- name: CD_sfa PROD +- alertingProfile: CD_sfa/alerting-profile/CDsfa-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDsfa-INT: +- name: CD_sfa INT +- alertingProfile: CD_sfa/alerting-profile/CDsfa-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDsfa-INT.EMEA-PreProd: +- name: CD_sfa INT +- alertingProfile: CD_sfa/alerting-profile/CDsfa-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDsfa-INT.NA-PreProd: +- name: CD_sfa INT +- alertingProfile: CD_sfa/alerting-profile/CDsfa-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDsfa-INT.CN-PreProd: +- name: CD_sfa INT +- alertingProfile: CD_sfa/alerting-profile/CDsfa-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_sfa/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_sfa/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_sfa/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..406e3573 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- sfa: default.json + +sfa: +- name: CD_sfa - +- mzName: CD_sfa/management-zone/CDsfa.name +- mzId: CD_sfa/management-zone/CDsfa.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_smart-access-order-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_smart-access-order-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..d23bd92b --- /dev/null +++ b/BMW-Dynatrace-config/CD_smart-access-order-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDsmart-access-order-service-PROD: default.json +- CDsmart-access-order-service-E2E: default.json +- CDsmart-access-order-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDsmart-access-order-service-PROD: +- name: CD_smart-access-order-service PROD +- tag: smart-access-order-service +- mzId: CD_smart-access-order-service/management-zone/CDsmart-access-order-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDsmart-access-order-service-PROD.EMEA-Prod: +- name: CD_smart-access-order-service PROD +- tag: smart-access-order-service +- mzId: CD_smart-access-order-service/management-zone/CDsmart-access-order-service.id +- env: PROD +- skipDeployment: "false" +CDsmart-access-order-service-PROD.NA-Prod: +- name: CD_smart-access-order-service PROD +- tag: smart-access-order-service +- mzId: CD_smart-access-order-service/management-zone/CDsmart-access-order-service.id +- env: PROD +- skipDeployment: "false" +CDsmart-access-order-service-PROD.CN-Prod: +- name: CD_smart-access-order-service PROD +- tag: smart-access-order-service +- mzId: CD_smart-access-order-service/management-zone/CDsmart-access-order-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDsmart-access-order-service-E2E: +- name: CD_smart-access-order-service E2E +- tag: smart-access-order-service +- mzId: CD_smart-access-order-service/management-zone/CDsmart-access-order-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDsmart-access-order-service-E2E.EMEA-Prod: +- name: CD_smart-access-order-service E2E +- tag: smart-access-order-service +- mzId: CD_smart-access-order-service/management-zone/CDsmart-access-order-service.id +- env: E2E +- skipDeployment: "false" +CDsmart-access-order-service-E2E.NA-Prod: +- name: CD_smart-access-order-service E2E +- tag: smart-access-order-service +- mzId: CD_smart-access-order-service/management-zone/CDsmart-access-order-service.id +- env: E2E +- skipDeployment: "false" +CDsmart-access-order-service-E2E.CN-Prod: +- name: CD_smart-access-order-service E2E +- tag: smart-access-order-service +- mzId: CD_smart-access-order-service/management-zone/CDsmart-access-order-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDsmart-access-order-service-INT: +- name: CD_smart-access-order-service INT +- tag: smart-access-order-service +- mzId: CD_smart-access-order-service/management-zone/CDsmart-access-order-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDsmart-access-order-service-INT.EMEA-PreProd: +- name: CD_smart-access-order-service INT +- tag: smart-access-order-service +- mzId: CD_smart-access-order-service/management-zone/CDsmart-access-order-service.id +- env: INT +- skipDeployment: "false" +CDsmart-access-order-service-INT.NA-PreProd: +- name: CD_smart-access-order-service INT +- tag: smart-access-order-service +- mzId: CD_smart-access-order-service/management-zone/CDsmart-access-order-service.id +- env: INT +- skipDeployment: "false" +CDsmart-access-order-service-INT.CN-PreProd: +- name: CD_smart-access-order-service INT +- tag: smart-access-order-service +- mzId: CD_smart-access-order-service/management-zone/CDsmart-access-order-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_smart-access-order-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_smart-access-order-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_smart-access-order-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_smart-access-order-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_smart-access-order-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_smart-access-order-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_smart-access-order-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_smart-access-order-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_smart-access-order-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_smart-access-order-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_smart-access-order-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_smart-access-order-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_smart-access-order-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_smart-access-order-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_smart-access-order-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_smart-access-order-service/dashboard/README.md b/BMW-Dynatrace-config/CD_smart-access-order-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_smart-access-order-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_smart-access-order-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_smart-access-order-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..b12f8606 --- /dev/null +++ b/BMW-Dynatrace-config/CD_smart-access-order-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDsmart-access-order-service-PROD-E2E: defaultPRODE2E.json +- CDsmart-access-order-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDsmart-access-order-service-PROD-E2E: +- name: CD_smart-access-order-service PROD +- mzName: CD_smart-access-order-service/management-zone/CDsmart-access-order-service.name +- mzId: CD_smart-access-order-service/management-zone/CDsmart-access-order-service.id +- skipDeployment: "true" +#Configuration +CDsmart-access-order-service-PROD-E2E.EMEA-Prod: +- name: CD_smart-access-order-service PROD +- mzName: CD_smart-access-order-service/management-zone/CDsmart-access-order-service.name +- mzId: CD_smart-access-order-service/management-zone/CDsmart-access-order-service.id +- tag: smart-access-order-service +- skipDeployment: "false" +CDsmart-access-order-service-PROD-E2E.NA-Prod: +- name: CD_smart-access-order-service PROD +- mzName: CD_smart-access-order-service/management-zone/CDsmart-access-order-service.name +- mzId: CD_smart-access-order-service/management-zone/CDsmart-access-order-service.id +- tag: smart-access-order-service +- skipDeployment: "false" +CDsmart-access-order-service-PROD-E2E.CN-Prod: +- name: CD_smart-access-order-service PROD +- mzName: CD_smart-access-order-service/management-zone/CDsmart-access-order-service.name +- mzId: CD_smart-access-order-service/management-zone/CDsmart-access-order-service.id +- tag: smart-access-order-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDsmart-access-order-service-INT-TEST: +- name: CD_smart-access-order-service INT-TEST +- mzName: CD_smart-access-order-service/management-zone/CDsmart-access-order-service.name +- mzId: CD_smart-access-order-service/management-zone/CDsmart-access-order-service.id +- tag: smart-access-order-service +- skipDeployment: "true" +#Configuration +CDsmart-access-order-service-INT-TEST.EMEA-PreProd: +- name: CD_smart-access-order-service INT-TEST +- mzName: CD_smart-access-order-service/management-zone/CDsmart-access-order-service.name +- mzId: CD_smart-access-order-service/management-zone/CDsmart-access-order-service.id +- tag: smart-access-order-service +- skipDeployment: "false" +CDsmart-access-order-service-INT-TEST.NA-PreProd: +- name: CD_smart-access-order-service INT-TEST +- mzName: CD_smart-access-order-service/management-zone/CDsmart-access-order-service.name +- mzId: CD_smart-access-order-service/management-zone/CDsmart-access-order-service.id +- env: INT +- skipDeployment: "false" +CDsmart-access-order-service-INT-TEST.CN-PreProd: +- name: CD_smart-access-order-service INT-TEST +- mzName: CD_smart-access-order-service/management-zone/CDsmart-access-order-service.name +- mzId: CD_smart-access-order-service/management-zone/CDsmart-access-order-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_smart-access-order-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_smart-access-order-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_smart-access-order-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_smart-access-order-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_smart-access-order-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_smart-access-order-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_smart-access-order-service/management-zone/README.md b/BMW-Dynatrace-config/CD_smart-access-order-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_smart-access-order-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_smart-access-order-service/management-zone/default.json b/BMW-Dynatrace-config/CD_smart-access-order-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_smart-access-order-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_smart-access-order-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_smart-access-order-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..f6beb809 --- /dev/null +++ b/BMW-Dynatrace-config/CD_smart-access-order-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDsmart-access-order-service: default.json + +CDsmart-access-order-service: +- name: CD_smart-access-order-service +- tag: smart-access-order-service diff --git a/BMW-Dynatrace-config/CD_smart-access-order-service/notification/README.md b/BMW-Dynatrace-config/CD_smart-access-order-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_smart-access-order-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_smart-access-order-service/notification/email.json b/BMW-Dynatrace-config/CD_smart-access-order-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_smart-access-order-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_smart-access-order-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_smart-access-order-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_smart-access-order-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_smart-access-order-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_smart-access-order-service/notification/notification.yaml new file mode 100644 index 00000000..efac0baf --- /dev/null +++ b/BMW-Dynatrace-config/CD_smart-access-order-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDsmart-access-order-service-PROD: msTeams.json +- CDsmart-access-order-service-E2E: msTeams.json +- CDsmart-access-order-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDsmart-access-order-service-PROD: +- name: CD_smart-access-order-service PROD +- alertingProfile: CD_smart-access-order-service/alerting-profile/CDsmart-access-order-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDsmart-access-order-service-PROD.EMEA-Prod: +- name: CD_smart-access-order-service PROD +- alertingProfile: CD_smart-access-order-service/alerting-profile/CDsmart-access-order-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDsmart-access-order-service-PROD.NA-Prod: +- name: CD_smart-access-order-service PROD +- alertingProfile: CD_smart-access-order-service/alerting-profile/CDsmart-access-order-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDsmart-access-order-service-PROD.CN-Prod: +- name: CD_smart-access-order-service PROD +- alertingProfile: CD_smart-access-order-service/alerting-profile/CDsmart-access-order-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDsmart-access-order-service-E2E: +- name: CD_smart-access-order-service E2E +- alertingProfile: CD_smart-access-order-service/alerting-profile/CDsmart-access-order-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDsmart-access-order-service-E2E.EMEA-Prod: +- name: CD_smart-access-order-service E2E +- alertingProfile: CD_smart-access-order-service/alerting-profile/CDsmart-access-order-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDsmart-access-order-service-E2E.NA-Prod: +- name: CD_smart-access-order-service E2E +- alertingProfile: CD_smart-access-order-service/alerting-profile/CDsmart-access-order-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDsmart-access-order-service-E2E.CN-Prod: +- name: CD_smart-access-order-service E2E +- alertingProfile: CD_smart-access-order-service/alerting-profile/CDsmart-access-order-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDsmart-access-order-service-INT: +- name: CD_smart-access-order-service INT +- alertingProfile: CD_smart-access-order-service/alerting-profile/CDsmart-access-order-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDsmart-access-order-service-INT.EMEA-PreProd: +- name: CD_smart-access-order-service INT +- alertingProfile: CD_smart-access-order-service/alerting-profile/CDsmart-access-order-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDsmart-access-order-service-INT.NA-PreProd: +- name: CD_smart-access-order-service INT +- alertingProfile: CD_smart-access-order-service/alerting-profile/CDsmart-access-order-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDsmart-access-order-service-INT.CN-PreProd: +- name: CD_smart-access-order-service INT +- alertingProfile: CD_smart-access-order-service/alerting-profile/CDsmart-access-order-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_smart-access-order-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_smart-access-order-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_smart-access-order-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_smart-access-order-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_smart-access-order-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_smart-access-order-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_smart-access-order-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_smart-access-order-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..ba7a36fe --- /dev/null +++ b/BMW-Dynatrace-config/CD_smart-access-order-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- smart-access-order-service: default.json + +smart-access-order-service: +- name: CD_smart-access-order-service - +- mzName: CD_smart-access-order-service/management-zone/CDsmart-access-order-service.name +- mzId: CD_smart-access-order-service/management-zone/CDsmart-access-order-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sms-email-adapter-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_sms-email-adapter-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..48f8d165 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sms-email-adapter-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDsms-email-adapter-service-PROD: default.json +- CDsms-email-adapter-service-E2E: default.json +- CDsms-email-adapter-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDsms-email-adapter-service-PROD: +- name: CD_sms-email-adapter-service PROD +- tag: sms-email-adapter-service +- mzId: CD_sms-email-adapter-service/management-zone/CDsms-email-adapter-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDsms-email-adapter-service-PROD.EMEA-Prod: +- name: CD_sms-email-adapter-service PROD +- tag: sms-email-adapter-service +- mzId: CD_sms-email-adapter-service/management-zone/CDsms-email-adapter-service.id +- env: PROD +- skipDeployment: "false" +CDsms-email-adapter-service-PROD.NA-Prod: +- name: CD_sms-email-adapter-service PROD +- tag: sms-email-adapter-service +- mzId: CD_sms-email-adapter-service/management-zone/CDsms-email-adapter-service.id +- env: PROD +- skipDeployment: "false" +CDsms-email-adapter-service-PROD.CN-Prod: +- name: CD_sms-email-adapter-service PROD +- tag: sms-email-adapter-service +- mzId: CD_sms-email-adapter-service/management-zone/CDsms-email-adapter-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDsms-email-adapter-service-E2E: +- name: CD_sms-email-adapter-service E2E +- tag: sms-email-adapter-service +- mzId: CD_sms-email-adapter-service/management-zone/CDsms-email-adapter-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDsms-email-adapter-service-E2E.EMEA-Prod: +- name: CD_sms-email-adapter-service E2E +- tag: sms-email-adapter-service +- mzId: CD_sms-email-adapter-service/management-zone/CDsms-email-adapter-service.id +- env: E2E +- skipDeployment: "false" +CDsms-email-adapter-service-E2E.NA-Prod: +- name: CD_sms-email-adapter-service E2E +- tag: sms-email-adapter-service +- mzId: CD_sms-email-adapter-service/management-zone/CDsms-email-adapter-service.id +- env: E2E +- skipDeployment: "false" +CDsms-email-adapter-service-E2E.CN-Prod: +- name: CD_sms-email-adapter-service E2E +- tag: sms-email-adapter-service +- mzId: CD_sms-email-adapter-service/management-zone/CDsms-email-adapter-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDsms-email-adapter-service-INT: +- name: CD_sms-email-adapter-service INT +- tag: sms-email-adapter-service +- mzId: CD_sms-email-adapter-service/management-zone/CDsms-email-adapter-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDsms-email-adapter-service-INT.EMEA-PreProd: +- name: CD_sms-email-adapter-service INT +- tag: sms-email-adapter-service +- mzId: CD_sms-email-adapter-service/management-zone/CDsms-email-adapter-service.id +- env: INT +- skipDeployment: "false" +CDsms-email-adapter-service-INT.NA-PreProd: +- name: CD_sms-email-adapter-service INT +- tag: sms-email-adapter-service +- mzId: CD_sms-email-adapter-service/management-zone/CDsms-email-adapter-service.id +- env: INT +- skipDeployment: "false" +CDsms-email-adapter-service-INT.CN-PreProd: +- name: CD_sms-email-adapter-service INT +- tag: sms-email-adapter-service +- mzId: CD_sms-email-adapter-service/management-zone/CDsms-email-adapter-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sms-email-adapter-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_sms-email-adapter-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sms-email-adapter-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sms-email-adapter-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_sms-email-adapter-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_sms-email-adapter-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sms-email-adapter-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_sms-email-adapter-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sms-email-adapter-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sms-email-adapter-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_sms-email-adapter-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sms-email-adapter-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sms-email-adapter-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_sms-email-adapter-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sms-email-adapter-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sms-email-adapter-service/dashboard/README.md b/BMW-Dynatrace-config/CD_sms-email-adapter-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_sms-email-adapter-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sms-email-adapter-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_sms-email-adapter-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..ef8ee6e7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sms-email-adapter-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDsms-email-adapter-service-PROD-E2E: defaultPRODE2E.json +- CDsms-email-adapter-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDsms-email-adapter-service-PROD-E2E: +- name: CD_sms-email-adapter-service PROD +- mzName: CD_sms-email-adapter-service/management-zone/CDsms-email-adapter-service.name +- mzId: CD_sms-email-adapter-service/management-zone/CDsms-email-adapter-service.id +- skipDeployment: "true" +#Configuration +CDsms-email-adapter-service-PROD-E2E.EMEA-Prod: +- name: CD_sms-email-adapter-service PROD +- mzName: CD_sms-email-adapter-service/management-zone/CDsms-email-adapter-service.name +- mzId: CD_sms-email-adapter-service/management-zone/CDsms-email-adapter-service.id +- tag: sms-email-adapter-service +- skipDeployment: "false" +CDsms-email-adapter-service-PROD-E2E.NA-Prod: +- name: CD_sms-email-adapter-service PROD +- mzName: CD_sms-email-adapter-service/management-zone/CDsms-email-adapter-service.name +- mzId: CD_sms-email-adapter-service/management-zone/CDsms-email-adapter-service.id +- tag: sms-email-adapter-service +- skipDeployment: "false" +CDsms-email-adapter-service-PROD-E2E.CN-Prod: +- name: CD_sms-email-adapter-service PROD +- mzName: CD_sms-email-adapter-service/management-zone/CDsms-email-adapter-service.name +- mzId: CD_sms-email-adapter-service/management-zone/CDsms-email-adapter-service.id +- tag: sms-email-adapter-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDsms-email-adapter-service-INT-TEST: +- name: CD_sms-email-adapter-service INT-TEST +- mzName: CD_sms-email-adapter-service/management-zone/CDsms-email-adapter-service.name +- mzId: CD_sms-email-adapter-service/management-zone/CDsms-email-adapter-service.id +- tag: sms-email-adapter-service +- skipDeployment: "true" +#Configuration +CDsms-email-adapter-service-INT-TEST.EMEA-PreProd: +- name: CD_sms-email-adapter-service INT-TEST +- mzName: CD_sms-email-adapter-service/management-zone/CDsms-email-adapter-service.name +- mzId: CD_sms-email-adapter-service/management-zone/CDsms-email-adapter-service.id +- tag: sms-email-adapter-service +- skipDeployment: "false" +CDsms-email-adapter-service-INT-TEST.NA-PreProd: +- name: CD_sms-email-adapter-service INT-TEST +- mzName: CD_sms-email-adapter-service/management-zone/CDsms-email-adapter-service.name +- mzId: CD_sms-email-adapter-service/management-zone/CDsms-email-adapter-service.id +- env: INT +- skipDeployment: "false" +CDsms-email-adapter-service-INT-TEST.CN-PreProd: +- name: CD_sms-email-adapter-service INT-TEST +- mzName: CD_sms-email-adapter-service/management-zone/CDsms-email-adapter-service.name +- mzId: CD_sms-email-adapter-service/management-zone/CDsms-email-adapter-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sms-email-adapter-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_sms-email-adapter-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sms-email-adapter-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sms-email-adapter-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_sms-email-adapter-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_sms-email-adapter-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sms-email-adapter-service/management-zone/README.md b/BMW-Dynatrace-config/CD_sms-email-adapter-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sms-email-adapter-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_sms-email-adapter-service/management-zone/default.json b/BMW-Dynatrace-config/CD_sms-email-adapter-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_sms-email-adapter-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sms-email-adapter-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_sms-email-adapter-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..e3abada8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sms-email-adapter-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDsms-email-adapter-service: default.json + +CDsms-email-adapter-service: +- name: CD_sms-email-adapter-service +- tag: sms-email-adapter-service diff --git a/BMW-Dynatrace-config/CD_sms-email-adapter-service/notification/README.md b/BMW-Dynatrace-config/CD_sms-email-adapter-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sms-email-adapter-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sms-email-adapter-service/notification/email.json b/BMW-Dynatrace-config/CD_sms-email-adapter-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sms-email-adapter-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sms-email-adapter-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_sms-email-adapter-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sms-email-adapter-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sms-email-adapter-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_sms-email-adapter-service/notification/notification.yaml new file mode 100644 index 00000000..ce1fa6b9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sms-email-adapter-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDsms-email-adapter-service-PROD: msTeams.json +- CDsms-email-adapter-service-E2E: msTeams.json +- CDsms-email-adapter-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDsms-email-adapter-service-PROD: +- name: CD_sms-email-adapter-service PROD +- alertingProfile: CD_sms-email-adapter-service/alerting-profile/CDsms-email-adapter-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDsms-email-adapter-service-PROD.EMEA-Prod: +- name: CD_sms-email-adapter-service PROD +- alertingProfile: CD_sms-email-adapter-service/alerting-profile/CDsms-email-adapter-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDsms-email-adapter-service-PROD.NA-Prod: +- name: CD_sms-email-adapter-service PROD +- alertingProfile: CD_sms-email-adapter-service/alerting-profile/CDsms-email-adapter-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDsms-email-adapter-service-PROD.CN-Prod: +- name: CD_sms-email-adapter-service PROD +- alertingProfile: CD_sms-email-adapter-service/alerting-profile/CDsms-email-adapter-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDsms-email-adapter-service-E2E: +- name: CD_sms-email-adapter-service E2E +- alertingProfile: CD_sms-email-adapter-service/alerting-profile/CDsms-email-adapter-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDsms-email-adapter-service-E2E.EMEA-Prod: +- name: CD_sms-email-adapter-service E2E +- alertingProfile: CD_sms-email-adapter-service/alerting-profile/CDsms-email-adapter-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDsms-email-adapter-service-E2E.NA-Prod: +- name: CD_sms-email-adapter-service E2E +- alertingProfile: CD_sms-email-adapter-service/alerting-profile/CDsms-email-adapter-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDsms-email-adapter-service-E2E.CN-Prod: +- name: CD_sms-email-adapter-service E2E +- alertingProfile: CD_sms-email-adapter-service/alerting-profile/CDsms-email-adapter-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDsms-email-adapter-service-INT: +- name: CD_sms-email-adapter-service INT +- alertingProfile: CD_sms-email-adapter-service/alerting-profile/CDsms-email-adapter-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDsms-email-adapter-service-INT.EMEA-PreProd: +- name: CD_sms-email-adapter-service INT +- alertingProfile: CD_sms-email-adapter-service/alerting-profile/CDsms-email-adapter-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDsms-email-adapter-service-INT.NA-PreProd: +- name: CD_sms-email-adapter-service INT +- alertingProfile: CD_sms-email-adapter-service/alerting-profile/CDsms-email-adapter-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDsms-email-adapter-service-INT.CN-PreProd: +- name: CD_sms-email-adapter-service INT +- alertingProfile: CD_sms-email-adapter-service/alerting-profile/CDsms-email-adapter-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sms-email-adapter-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_sms-email-adapter-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_sms-email-adapter-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sms-email-adapter-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_sms-email-adapter-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_sms-email-adapter-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sms-email-adapter-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_sms-email-adapter-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..49c10d52 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sms-email-adapter-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- sms-email-adapter-service: default.json + +sms-email-adapter-service: +- name: CD_sms-email-adapter-service - +- mzName: CD_sms-email-adapter-service/management-zone/CDsms-email-adapter-service.name +- mzId: CD_sms-email-adapter-service/management-zone/CDsms-email-adapter-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_srmanager/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_srmanager/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..48b8c5c0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_srmanager/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDsrmanager-PROD: default.json +- CDsrmanager-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDsrmanager-PROD: +- name: CD_srmanager PROD +- tag: srmanager +- mzId: CD_srmanager/management-zone/CDsrmanager.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDsrmanager-PROD.EMEA-Prod: +- name: CD_srmanager PROD +- tag: srmanager +- mzId: CD_srmanager/management-zone/CDsrmanager.id +- env: PROD +- skipDeployment: "false" +CDsrmanager-PROD.NA-Prod: +- name: CD_srmanager PROD +- tag: srmanager +- mzId: CD_srmanager/management-zone/CDsrmanager.id +- env: PROD +- skipDeployment: "false" +CDsrmanager-PROD.CN-Prod: +- name: CD_srmanager PROD +- tag: srmanager +- mzId: CD_srmanager/management-zone/CDsrmanager.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDsrmanager-INT: +- name: CD_srmanager INT +- tag: srmanager +- mzId: CD_srmanager/management-zone/CDsrmanager.id +- env: INT +- skipDeployment: "true" +#Configuration +CDsrmanager-INT.EMEA-PreProd: +- name: CD_srmanager INT +- tag: srmanager +- mzId: CD_srmanager/management-zone/CDsrmanager.id +- env: INT +- skipDeployment: "false" +CDsrmanager-INT.NA-PreProd: +- name: CD_srmanager INT +- tag: srmanager +- mzId: CD_srmanager/management-zone/CDsrmanager.id +- env: INT +- skipDeployment: "false" +CDsrmanager-INT.CN-PreProd: +- name: CD_srmanager INT +- tag: srmanager +- mzId: CD_srmanager/management-zone/CDsrmanager.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_srmanager/alerting-profile/default.json b/BMW-Dynatrace-config/CD_srmanager/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_srmanager/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_srmanager/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_srmanager/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_srmanager/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_srmanager/custom-service-java/README.md b/BMW-Dynatrace-config/CD_srmanager/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_srmanager/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_srmanager/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_srmanager/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_srmanager/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_srmanager/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_srmanager/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_srmanager/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_srmanager/dashboard/README.md b/BMW-Dynatrace-config/CD_srmanager/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_srmanager/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_srmanager/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_srmanager/dashboard/dashboard.yaml new file mode 100644 index 00000000..ac9a0da7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_srmanager/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDsrmanager-PROD-E2E: defaultPRODE2E.json +- CDsrmanager-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDsrmanager-PROD-E2E: +- name: CD_srmanager PROD-E2E +- mzName: CD_srmanager/management-zone/CDsrmanager.name +- mzId: CD_srmanager/management-zone/CDsrmanager.id +- skipDeployment: "true" +#Configuration +CDsrmanager-PROD-E2E.EMEA-Prod: +- name: CD_srmanager PROD-E2E +- mzName: CD_srmanager/management-zone/CDsrmanager.name +- mzId: CD_srmanager/management-zone/CDsrmanager.id +- tag: srmanager +- skipDeployment: "false" +CDsrmanager-PROD-E2E.NA-Prod: +- name: CD_srmanager PROD-E2E +- mzName: CD_srmanager/management-zone/CDsrmanager.name +- mzId: CD_srmanager/management-zone/CDsrmanager.id +- tag: srmanager +- skipDeployment: "false" +CDsrmanager-PROD-E2E.CN-Prod: +- name: CD_srmanager PROD-E2E +- mzName: CD_srmanager/management-zone/CDsrmanager.name +- mzId: CD_srmanager/management-zone/CDsrmanager.id +- tag: srmanager +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDsrmanager-INT-TEST: +- name: CD_srmanager INT-TEST +- mzName: CD_srmanager/management-zone/CDsrmanager.name +- mzId: CD_srmanager/management-zone/CDsrmanager.id +- tag: srmanager +- skipDeployment: "true" +#Configuration +CDsrmanager-INT-TEST.EMEA-PreProd: +- name: CD_srmanager INT-TEST +- mzName: CD_srmanager/management-zone/CDsrmanager.name +- mzId: CD_srmanager/management-zone/CDsrmanager.id +- tag: srmanager +- skipDeployment: "false" +CDsrmanager-INT-TEST.NA-PreProd: +- name: CD_srmanager INT-TEST +- mzName: CD_srmanager/management-zone/CDsrmanager.name +- mzId: CD_srmanager/management-zone/CDsrmanager.id +- env: INT +- skipDeployment: "false" +CDsrmanager-INT-TEST.CN-PreProd: +- name: CD_srmanager INT-TEST +- mzName: CD_srmanager/management-zone/CDsrmanager.name +- mzId: CD_srmanager/management-zone/CDsrmanager.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_srmanager/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_srmanager/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_srmanager/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_srmanager/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_srmanager/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_srmanager/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_srmanager/management-zone/README.md b/BMW-Dynatrace-config/CD_srmanager/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_srmanager/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_srmanager/management-zone/default.json b/BMW-Dynatrace-config/CD_srmanager/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_srmanager/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_srmanager/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_srmanager/management-zone/management-zone.yaml new file mode 100644 index 00000000..6e443267 --- /dev/null +++ b/BMW-Dynatrace-config/CD_srmanager/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDsrmanager: default.json + +CDsrmanager: +- name: CD_srmanager +- tag: srmanager diff --git a/BMW-Dynatrace-config/CD_srmanager/notification/README.md b/BMW-Dynatrace-config/CD_srmanager/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_srmanager/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_srmanager/notification/email.json b/BMW-Dynatrace-config/CD_srmanager/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_srmanager/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_srmanager/notification/msTeams.json b/BMW-Dynatrace-config/CD_srmanager/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_srmanager/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_srmanager/notification/notification.yaml b/BMW-Dynatrace-config/CD_srmanager/notification/notification.yaml new file mode 100644 index 00000000..ba888ad5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_srmanager/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDsrmanager-PROD: msTeams.json +- CDsrmanager-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDsrmanager-PROD: +- name: CD_srmanager PROD +- alertingProfile: CD_srmanager/alerting-profile/CDsrmanager-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDsrmanager-PROD.EMEA-Prod: +- name: CD_srmanager PROD +- alertingProfile: CD_srmanager/alerting-profile/CDsrmanager-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDsrmanager-PROD.NA-Prod: +- name: CD_srmanager PROD +- alertingProfile: CD_srmanager/alerting-profile/CDsrmanager-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDsrmanager-PROD.CN-Prod: +- name: CD_srmanager PROD +- alertingProfile: CD_srmanager/alerting-profile/CDsrmanager-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDsrmanager-INT: +- name: CD_srmanager INT +- alertingProfile: CD_srmanager/alerting-profile/CDsrmanager-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDsrmanager-INT.EMEA-PreProd: +- name: CD_srmanager INT +- alertingProfile: CD_srmanager/alerting-profile/CDsrmanager-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDsrmanager-INT.NA-PreProd: +- name: CD_srmanager INT +- alertingProfile: CD_srmanager/alerting-profile/CDsrmanager-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDsrmanager-INT.CN-PreProd: +- name: CD_srmanager INT +- alertingProfile: CD_srmanager/alerting-profile/CDsrmanager-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_srmanager/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_srmanager/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_srmanager/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_srmanager/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_srmanager/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_srmanager/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_srmanager/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_srmanager/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..36782d05 --- /dev/null +++ b/BMW-Dynatrace-config/CD_srmanager/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- srmanager: default.json + +srmanager: +- name: CD_srmanager - +- mzName: CD_srmanager/management-zone/CDsrmanager.name +- mzId: CD_srmanager/management-zone/CDsrmanager.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_stm/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_stm/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..1d1df87e --- /dev/null +++ b/BMW-Dynatrace-config/CD_stm/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDstm-PROD: default.json +- CDstm-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDstm-PROD: +- name: CD_stm PROD +- tag: stm +- mzId: CD_stm/management-zone/CDstm.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDstm-PROD.EMEA-Prod: +- name: CD_stm PROD +- tag: stm +- mzId: CD_stm/management-zone/CDstm.id +- env: PROD +- skipDeployment: "false" +CDstm-PROD.NA-Prod: +- name: CD_stm PROD +- tag: stm +- mzId: CD_stm/management-zone/CDstm.id +- env: PROD +- skipDeployment: "false" +CDstm-PROD.CN-Prod: +- name: CD_stm PROD +- tag: stm +- mzId: CD_stm/management-zone/CDstm.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDstm-INT: +- name: CD_stm INT +- tag: stm +- mzId: CD_stm/management-zone/CDstm.id +- env: INT +- skipDeployment: "true" +#Configuration +CDstm-INT.EMEA-PreProd: +- name: CD_stm INT +- tag: stm +- mzId: CD_stm/management-zone/CDstm.id +- env: INT +- skipDeployment: "false" +CDstm-INT.NA-PreProd: +- name: CD_stm INT +- tag: stm +- mzId: CD_stm/management-zone/CDstm.id +- env: INT +- skipDeployment: "false" +CDstm-INT.CN-PreProd: +- name: CD_stm INT +- tag: stm +- mzId: CD_stm/management-zone/CDstm.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_stm/alerting-profile/default.json b/BMW-Dynatrace-config/CD_stm/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_stm/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_stm/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_stm/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_stm/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_stm/custom-service-java/README.md b/BMW-Dynatrace-config/CD_stm/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_stm/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_stm/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_stm/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_stm/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_stm/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_stm/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_stm/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_stm/dashboard/README.md b/BMW-Dynatrace-config/CD_stm/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_stm/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_stm/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_stm/dashboard/dashboard.yaml new file mode 100644 index 00000000..b6f7b3fb --- /dev/null +++ b/BMW-Dynatrace-config/CD_stm/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDstm-PROD-E2E: defaultPRODE2E.json +- CDstm-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDstm-PROD-E2E: +- name: CD_stm PROD-E2E +- mzName: CD_stm/management-zone/CDstm.name +- mzId: CD_stm/management-zone/CDstm.id +- skipDeployment: "true" +#Configuration +CDstm-PROD-E2E.EMEA-Prod: +- name: CD_stm PROD-E2E +- mzName: CD_stm/management-zone/CDstm.name +- mzId: CD_stm/management-zone/CDstm.id +- tag: stm +- skipDeployment: "false" +CDstm-PROD-E2E.NA-Prod: +- name: CD_stm PROD-E2E +- mzName: CD_stm/management-zone/CDstm.name +- mzId: CD_stm/management-zone/CDstm.id +- tag: stm +- skipDeployment: "false" +CDstm-PROD-E2E.CN-Prod: +- name: CD_stm PROD-E2E +- mzName: CD_stm/management-zone/CDstm.name +- mzId: CD_stm/management-zone/CDstm.id +- tag: stm +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDstm-INT-TEST: +- name: CD_stm INT-TEST +- mzName: CD_stm/management-zone/CDstm.name +- mzId: CD_stm/management-zone/CDstm.id +- tag: stm +- skipDeployment: "true" +#Configuration +CDstm-INT-TEST.EMEA-PreProd: +- name: CD_stm INT-TEST +- mzName: CD_stm/management-zone/CDstm.name +- mzId: CD_stm/management-zone/CDstm.id +- tag: stm +- skipDeployment: "false" +CDstm-INT-TEST.NA-PreProd: +- name: CD_stm INT-TEST +- mzName: CD_stm/management-zone/CDstm.name +- mzId: CD_stm/management-zone/CDstm.id +- env: INT +- skipDeployment: "false" +CDstm-INT-TEST.CN-PreProd: +- name: CD_stm INT-TEST +- mzName: CD_stm/management-zone/CDstm.name +- mzId: CD_stm/management-zone/CDstm.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_stm/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_stm/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_stm/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_stm/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_stm/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_stm/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_stm/management-zone/README.md b/BMW-Dynatrace-config/CD_stm/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_stm/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_stm/management-zone/default.json b/BMW-Dynatrace-config/CD_stm/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_stm/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_stm/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_stm/management-zone/management-zone.yaml new file mode 100644 index 00000000..f876b4d4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_stm/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDstm: default.json + +CDstm: +- name: CD_stm +- tag: stm diff --git a/BMW-Dynatrace-config/CD_stm/notification/README.md b/BMW-Dynatrace-config/CD_stm/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_stm/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_stm/notification/email.json b/BMW-Dynatrace-config/CD_stm/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_stm/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_stm/notification/msTeams.json b/BMW-Dynatrace-config/CD_stm/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_stm/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_stm/notification/notification.yaml b/BMW-Dynatrace-config/CD_stm/notification/notification.yaml new file mode 100644 index 00000000..f3fd1798 --- /dev/null +++ b/BMW-Dynatrace-config/CD_stm/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDstm-PROD: msTeams.json +- CDstm-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDstm-PROD: +- name: CD_stm PROD +- alertingProfile: CD_stm/alerting-profile/CDstm-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDstm-PROD.EMEA-Prod: +- name: CD_stm PROD +- alertingProfile: CD_stm/alerting-profile/CDstm-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDstm-PROD.NA-Prod: +- name: CD_stm PROD +- alertingProfile: CD_stm/alerting-profile/CDstm-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDstm-PROD.CN-Prod: +- name: CD_stm PROD +- alertingProfile: CD_stm/alerting-profile/CDstm-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDstm-INT: +- name: CD_stm INT +- alertingProfile: CD_stm/alerting-profile/CDstm-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDstm-INT.EMEA-PreProd: +- name: CD_stm INT +- alertingProfile: CD_stm/alerting-profile/CDstm-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDstm-INT.NA-PreProd: +- name: CD_stm INT +- alertingProfile: CD_stm/alerting-profile/CDstm-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDstm-INT.CN-PreProd: +- name: CD_stm INT +- alertingProfile: CD_stm/alerting-profile/CDstm-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_stm/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_stm/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_stm/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_stm/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_stm/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_stm/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_stm/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_stm/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..6b43861b --- /dev/null +++ b/BMW-Dynatrace-config/CD_stm/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- stm: default.json + +stm: +- name: CD_stm - +- mzName: CD_stm/management-zone/CDstm.name +- mzId: CD_stm/management-zone/CDstm.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_svcinfo/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_svcinfo/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..966c6c01 --- /dev/null +++ b/BMW-Dynatrace-config/CD_svcinfo/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDsvcinfo-PROD: default.json +- CDsvcinfo-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDsvcinfo-PROD: +- name: CD_svcinfo PROD +- tag: svcinfo +- mzId: CD_svcinfo/management-zone/CDsvcinfo.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDsvcinfo-PROD.EMEA-Prod: +- name: CD_svcinfo PROD +- tag: svcinfo +- mzId: CD_svcinfo/management-zone/CDsvcinfo.id +- env: PROD +- skipDeployment: "false" +CDsvcinfo-PROD.NA-Prod: +- name: CD_svcinfo PROD +- tag: svcinfo +- mzId: CD_svcinfo/management-zone/CDsvcinfo.id +- env: PROD +- skipDeployment: "false" +CDsvcinfo-PROD.CN-Prod: +- name: CD_svcinfo PROD +- tag: svcinfo +- mzId: CD_svcinfo/management-zone/CDsvcinfo.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDsvcinfo-INT: +- name: CD_svcinfo INT +- tag: svcinfo +- mzId: CD_svcinfo/management-zone/CDsvcinfo.id +- env: INT +- skipDeployment: "true" +#Configuration +CDsvcinfo-INT.EMEA-PreProd: +- name: CD_svcinfo INT +- tag: svcinfo +- mzId: CD_svcinfo/management-zone/CDsvcinfo.id +- env: INT +- skipDeployment: "false" +CDsvcinfo-INT.NA-PreProd: +- name: CD_svcinfo INT +- tag: svcinfo +- mzId: CD_svcinfo/management-zone/CDsvcinfo.id +- env: INT +- skipDeployment: "false" +CDsvcinfo-INT.CN-PreProd: +- name: CD_svcinfo INT +- tag: svcinfo +- mzId: CD_svcinfo/management-zone/CDsvcinfo.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_svcinfo/alerting-profile/default.json b/BMW-Dynatrace-config/CD_svcinfo/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_svcinfo/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_svcinfo/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_svcinfo/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_svcinfo/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_svcinfo/custom-service-java/README.md b/BMW-Dynatrace-config/CD_svcinfo/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_svcinfo/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_svcinfo/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_svcinfo/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_svcinfo/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_svcinfo/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_svcinfo/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_svcinfo/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_svcinfo/dashboard/README.md b/BMW-Dynatrace-config/CD_svcinfo/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_svcinfo/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_svcinfo/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_svcinfo/dashboard/dashboard.yaml new file mode 100644 index 00000000..0bc5001e --- /dev/null +++ b/BMW-Dynatrace-config/CD_svcinfo/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDsvcinfo-PROD-E2E: defaultPRODE2E.json +- CDsvcinfo-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDsvcinfo-PROD-E2E: +- name: CD_svcinfo PROD-E2E +- mzName: CD_svcinfo/management-zone/CDsvcinfo.name +- mzId: CD_svcinfo/management-zone/CDsvcinfo.id +- skipDeployment: "true" +#Configuration +CDsvcinfo-PROD-E2E.EMEA-Prod: +- name: CD_svcinfo PROD-E2E +- mzName: CD_svcinfo/management-zone/CDsvcinfo.name +- mzId: CD_svcinfo/management-zone/CDsvcinfo.id +- tag: svcinfo +- skipDeployment: "false" +CDsvcinfo-PROD-E2E.NA-Prod: +- name: CD_svcinfo PROD-E2E +- mzName: CD_svcinfo/management-zone/CDsvcinfo.name +- mzId: CD_svcinfo/management-zone/CDsvcinfo.id +- tag: svcinfo +- skipDeployment: "false" +CDsvcinfo-PROD-E2E.CN-Prod: +- name: CD_svcinfo PROD-E2E +- mzName: CD_svcinfo/management-zone/CDsvcinfo.name +- mzId: CD_svcinfo/management-zone/CDsvcinfo.id +- tag: svcinfo +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDsvcinfo-INT-TEST: +- name: CD_svcinfo INT-TEST +- mzName: CD_svcinfo/management-zone/CDsvcinfo.name +- mzId: CD_svcinfo/management-zone/CDsvcinfo.id +- tag: svcinfo +- skipDeployment: "true" +#Configuration +CDsvcinfo-INT-TEST.EMEA-PreProd: +- name: CD_svcinfo INT-TEST +- mzName: CD_svcinfo/management-zone/CDsvcinfo.name +- mzId: CD_svcinfo/management-zone/CDsvcinfo.id +- tag: svcinfo +- skipDeployment: "false" +CDsvcinfo-INT-TEST.NA-PreProd: +- name: CD_svcinfo INT-TEST +- mzName: CD_svcinfo/management-zone/CDsvcinfo.name +- mzId: CD_svcinfo/management-zone/CDsvcinfo.id +- env: INT +- skipDeployment: "false" +CDsvcinfo-INT-TEST.CN-PreProd: +- name: CD_svcinfo INT-TEST +- mzName: CD_svcinfo/management-zone/CDsvcinfo.name +- mzId: CD_svcinfo/management-zone/CDsvcinfo.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_svcinfo/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_svcinfo/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_svcinfo/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_svcinfo/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_svcinfo/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_svcinfo/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_svcinfo/management-zone/README.md b/BMW-Dynatrace-config/CD_svcinfo/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_svcinfo/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_svcinfo/management-zone/default.json b/BMW-Dynatrace-config/CD_svcinfo/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_svcinfo/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_svcinfo/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_svcinfo/management-zone/management-zone.yaml new file mode 100644 index 00000000..cd918fb0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_svcinfo/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDsvcinfo: default.json + +CDsvcinfo: +- name: CD_svcinfo +- tag: svcinfo diff --git a/BMW-Dynatrace-config/CD_svcinfo/notification/README.md b/BMW-Dynatrace-config/CD_svcinfo/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_svcinfo/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_svcinfo/notification/email.json b/BMW-Dynatrace-config/CD_svcinfo/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_svcinfo/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_svcinfo/notification/msTeams.json b/BMW-Dynatrace-config/CD_svcinfo/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_svcinfo/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_svcinfo/notification/notification.yaml b/BMW-Dynatrace-config/CD_svcinfo/notification/notification.yaml new file mode 100644 index 00000000..b9251a9c --- /dev/null +++ b/BMW-Dynatrace-config/CD_svcinfo/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDsvcinfo-PROD: msTeams.json +- CDsvcinfo-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDsvcinfo-PROD: +- name: CD_svcinfo PROD +- alertingProfile: CD_svcinfo/alerting-profile/CDsvcinfo-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDsvcinfo-PROD.EMEA-Prod: +- name: CD_svcinfo PROD +- alertingProfile: CD_svcinfo/alerting-profile/CDsvcinfo-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDsvcinfo-PROD.NA-Prod: +- name: CD_svcinfo PROD +- alertingProfile: CD_svcinfo/alerting-profile/CDsvcinfo-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDsvcinfo-PROD.CN-Prod: +- name: CD_svcinfo PROD +- alertingProfile: CD_svcinfo/alerting-profile/CDsvcinfo-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDsvcinfo-INT: +- name: CD_svcinfo INT +- alertingProfile: CD_svcinfo/alerting-profile/CDsvcinfo-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDsvcinfo-INT.EMEA-PreProd: +- name: CD_svcinfo INT +- alertingProfile: CD_svcinfo/alerting-profile/CDsvcinfo-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDsvcinfo-INT.NA-PreProd: +- name: CD_svcinfo INT +- alertingProfile: CD_svcinfo/alerting-profile/CDsvcinfo-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDsvcinfo-INT.CN-PreProd: +- name: CD_svcinfo INT +- alertingProfile: CD_svcinfo/alerting-profile/CDsvcinfo-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_svcinfo/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_svcinfo/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_svcinfo/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_svcinfo/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_svcinfo/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_svcinfo/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_svcinfo/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_svcinfo/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..3f220dca --- /dev/null +++ b/BMW-Dynatrace-config/CD_svcinfo/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- svcinfo: default.json + +svcinfo: +- name: CD_svcinfo - +- mzName: CD_svcinfo/management-zone/CDsvcinfo.name +- mzId: CD_svcinfo/management-zone/CDsvcinfo.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timer-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_timer-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..0faa3956 --- /dev/null +++ b/BMW-Dynatrace-config/CD_timer-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDtimer-service-PROD: default.json +- CDtimer-service-E2E: default.json +- CDtimer-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDtimer-service-PROD: +- name: CD_timer-service PROD +- tag: timer-service +- mzId: CD_timer-service/management-zone/CDtimer-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDtimer-service-PROD.EMEA-Prod: +- name: CD_timer-service PROD +- tag: timer-service +- mzId: CD_timer-service/management-zone/CDtimer-service.id +- env: PROD +- skipDeployment: "false" +CDtimer-service-PROD.NA-Prod: +- name: CD_timer-service PROD +- tag: timer-service +- mzId: CD_timer-service/management-zone/CDtimer-service.id +- env: PROD +- skipDeployment: "false" +CDtimer-service-PROD.CN-Prod: +- name: CD_timer-service PROD +- tag: timer-service +- mzId: CD_timer-service/management-zone/CDtimer-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDtimer-service-E2E: +- name: CD_timer-service E2E +- tag: timer-service +- mzId: CD_timer-service/management-zone/CDtimer-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDtimer-service-E2E.EMEA-Prod: +- name: CD_timer-service E2E +- tag: timer-service +- mzId: CD_timer-service/management-zone/CDtimer-service.id +- env: E2E +- skipDeployment: "false" +CDtimer-service-E2E.NA-Prod: +- name: CD_timer-service E2E +- tag: timer-service +- mzId: CD_timer-service/management-zone/CDtimer-service.id +- env: E2E +- skipDeployment: "false" +CDtimer-service-E2E.CN-Prod: +- name: CD_timer-service E2E +- tag: timer-service +- mzId: CD_timer-service/management-zone/CDtimer-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDtimer-service-INT: +- name: CD_timer-service INT +- tag: timer-service +- mzId: CD_timer-service/management-zone/CDtimer-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDtimer-service-INT.EMEA-PreProd: +- name: CD_timer-service INT +- tag: timer-service +- mzId: CD_timer-service/management-zone/CDtimer-service.id +- env: INT +- skipDeployment: "false" +CDtimer-service-INT.NA-PreProd: +- name: CD_timer-service INT +- tag: timer-service +- mzId: CD_timer-service/management-zone/CDtimer-service.id +- env: INT +- skipDeployment: "false" +CDtimer-service-INT.CN-PreProd: +- name: CD_timer-service INT +- tag: timer-service +- mzId: CD_timer-service/management-zone/CDtimer-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timer-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_timer-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_timer-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timer-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_timer-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_timer-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timer-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_timer-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_timer-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timer-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_timer-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_timer-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timer-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_timer-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_timer-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timer-service/dashboard/README.md b/BMW-Dynatrace-config/CD_timer-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_timer-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timer-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_timer-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..d1da24a6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_timer-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDtimer-service-PROD-E2E: defaultPRODE2E.json +- CDtimer-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDtimer-service-PROD-E2E: +- name: CD_timer-service PROD +- mzName: CD_timer-service/management-zone/CDtimer-service.name +- mzId: CD_timer-service/management-zone/CDtimer-service.id +- skipDeployment: "true" +#Configuration +CDtimer-service-PROD-E2E.EMEA-Prod: +- name: CD_timer-service PROD +- mzName: CD_timer-service/management-zone/CDtimer-service.name +- mzId: CD_timer-service/management-zone/CDtimer-service.id +- tag: timer-service +- skipDeployment: "false" +CDtimer-service-PROD-E2E.NA-Prod: +- name: CD_timer-service PROD +- mzName: CD_timer-service/management-zone/CDtimer-service.name +- mzId: CD_timer-service/management-zone/CDtimer-service.id +- tag: timer-service +- skipDeployment: "false" +CDtimer-service-PROD-E2E.CN-Prod: +- name: CD_timer-service PROD +- mzName: CD_timer-service/management-zone/CDtimer-service.name +- mzId: CD_timer-service/management-zone/CDtimer-service.id +- tag: timer-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDtimer-service-INT-TEST: +- name: CD_timer-service INT-TEST +- mzName: CD_timer-service/management-zone/CDtimer-service.name +- mzId: CD_timer-service/management-zone/CDtimer-service.id +- tag: timer-service +- skipDeployment: "true" +#Configuration +CDtimer-service-INT-TEST.EMEA-PreProd: +- name: CD_timer-service INT-TEST +- mzName: CD_timer-service/management-zone/CDtimer-service.name +- mzId: CD_timer-service/management-zone/CDtimer-service.id +- tag: timer-service +- skipDeployment: "false" +CDtimer-service-INT-TEST.NA-PreProd: +- name: CD_timer-service INT-TEST +- mzName: CD_timer-service/management-zone/CDtimer-service.name +- mzId: CD_timer-service/management-zone/CDtimer-service.id +- env: INT +- skipDeployment: "false" +CDtimer-service-INT-TEST.CN-PreProd: +- name: CD_timer-service INT-TEST +- mzName: CD_timer-service/management-zone/CDtimer-service.name +- mzId: CD_timer-service/management-zone/CDtimer-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timer-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_timer-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_timer-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timer-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_timer-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_timer-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timer-service/management-zone/README.md b/BMW-Dynatrace-config/CD_timer-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_timer-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_timer-service/management-zone/default.json b/BMW-Dynatrace-config/CD_timer-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_timer-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timer-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_timer-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..5ccc0cde --- /dev/null +++ b/BMW-Dynatrace-config/CD_timer-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDtimer-service: default.json + +CDtimer-service: +- name: CD_timer-service +- tag: timer-service diff --git a/BMW-Dynatrace-config/CD_timer-service/notification/README.md b/BMW-Dynatrace-config/CD_timer-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_timer-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timer-service/notification/email.json b/BMW-Dynatrace-config/CD_timer-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_timer-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timer-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_timer-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_timer-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timer-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_timer-service/notification/notification.yaml new file mode 100644 index 00000000..efef9c32 --- /dev/null +++ b/BMW-Dynatrace-config/CD_timer-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDtimer-service-PROD: msTeams.json +- CDtimer-service-E2E: msTeams.json +- CDtimer-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtimer-service-PROD: +- name: CD_timer-service PROD +- alertingProfile: CD_timer-service/alerting-profile/CDtimer-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtimer-service-PROD.EMEA-Prod: +- name: CD_timer-service PROD +- alertingProfile: CD_timer-service/alerting-profile/CDtimer-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDtimer-service-PROD.NA-Prod: +- name: CD_timer-service PROD +- alertingProfile: CD_timer-service/alerting-profile/CDtimer-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDtimer-service-PROD.CN-Prod: +- name: CD_timer-service PROD +- alertingProfile: CD_timer-service/alerting-profile/CDtimer-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtimer-service-E2E: +- name: CD_timer-service E2E +- alertingProfile: CD_timer-service/alerting-profile/CDtimer-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtimer-service-E2E.EMEA-Prod: +- name: CD_timer-service E2E +- alertingProfile: CD_timer-service/alerting-profile/CDtimer-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDtimer-service-E2E.NA-Prod: +- name: CD_timer-service E2E +- alertingProfile: CD_timer-service/alerting-profile/CDtimer-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDtimer-service-E2E.CN-Prod: +- name: CD_timer-service E2E +- alertingProfile: CD_timer-service/alerting-profile/CDtimer-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtimer-service-INT: +- name: CD_timer-service INT +- alertingProfile: CD_timer-service/alerting-profile/CDtimer-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtimer-service-INT.EMEA-PreProd: +- name: CD_timer-service INT +- alertingProfile: CD_timer-service/alerting-profile/CDtimer-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDtimer-service-INT.NA-PreProd: +- name: CD_timer-service INT +- alertingProfile: CD_timer-service/alerting-profile/CDtimer-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDtimer-service-INT.CN-PreProd: +- name: CD_timer-service INT +- alertingProfile: CD_timer-service/alerting-profile/CDtimer-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timer-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_timer-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_timer-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timer-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_timer-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_timer-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timer-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_timer-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..301eba97 --- /dev/null +++ b/BMW-Dynatrace-config/CD_timer-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- timer-service: default.json + +timer-service: +- name: CD_timer-service - +- mzName: CD_timer-service/management-zone/CDtimer-service.name +- mzId: CD_timer-service/management-zone/CDtimer-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timers-processor/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_timers-processor/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..7b070984 --- /dev/null +++ b/BMW-Dynatrace-config/CD_timers-processor/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDtimers-processor-PROD: default.json +- CDtimers-processor-E2E: default.json +- CDtimers-processor-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDtimers-processor-PROD: +- name: CD_timers-processor PROD +- tag: timers-processor +- mzId: CD_timers-processor/management-zone/CDtimers-processor.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDtimers-processor-PROD.EMEA-Prod: +- name: CD_timers-processor PROD +- tag: timers-processor +- mzId: CD_timers-processor/management-zone/CDtimers-processor.id +- env: PROD +- skipDeployment: "false" +CDtimers-processor-PROD.NA-Prod: +- name: CD_timers-processor PROD +- tag: timers-processor +- mzId: CD_timers-processor/management-zone/CDtimers-processor.id +- env: PROD +- skipDeployment: "false" +CDtimers-processor-PROD.CN-Prod: +- name: CD_timers-processor PROD +- tag: timers-processor +- mzId: CD_timers-processor/management-zone/CDtimers-processor.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDtimers-processor-E2E: +- name: CD_timers-processor E2E +- tag: timers-processor +- mzId: CD_timers-processor/management-zone/CDtimers-processor.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDtimers-processor-E2E.EMEA-Prod: +- name: CD_timers-processor E2E +- tag: timers-processor +- mzId: CD_timers-processor/management-zone/CDtimers-processor.id +- env: E2E +- skipDeployment: "false" +CDtimers-processor-E2E.NA-Prod: +- name: CD_timers-processor E2E +- tag: timers-processor +- mzId: CD_timers-processor/management-zone/CDtimers-processor.id +- env: E2E +- skipDeployment: "false" +CDtimers-processor-E2E.CN-Prod: +- name: CD_timers-processor E2E +- tag: timers-processor +- mzId: CD_timers-processor/management-zone/CDtimers-processor.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDtimers-processor-INT: +- name: CD_timers-processor INT +- tag: timers-processor +- mzId: CD_timers-processor/management-zone/CDtimers-processor.id +- env: INT +- skipDeployment: "true" +#Configuration +CDtimers-processor-INT.EMEA-PreProd: +- name: CD_timers-processor INT +- tag: timers-processor +- mzId: CD_timers-processor/management-zone/CDtimers-processor.id +- env: INT +- skipDeployment: "false" +CDtimers-processor-INT.NA-PreProd: +- name: CD_timers-processor INT +- tag: timers-processor +- mzId: CD_timers-processor/management-zone/CDtimers-processor.id +- env: INT +- skipDeployment: "false" +CDtimers-processor-INT.CN-PreProd: +- name: CD_timers-processor INT +- tag: timers-processor +- mzId: CD_timers-processor/management-zone/CDtimers-processor.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timers-processor/alerting-profile/default.json b/BMW-Dynatrace-config/CD_timers-processor/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_timers-processor/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timers-processor/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_timers-processor/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_timers-processor/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timers-processor/custom-service-java/README.md b/BMW-Dynatrace-config/CD_timers-processor/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_timers-processor/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timers-processor/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_timers-processor/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_timers-processor/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timers-processor/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_timers-processor/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_timers-processor/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timers-processor/dashboard/README.md b/BMW-Dynatrace-config/CD_timers-processor/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_timers-processor/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timers-processor/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_timers-processor/dashboard/dashboard.yaml new file mode 100644 index 00000000..090fa19c --- /dev/null +++ b/BMW-Dynatrace-config/CD_timers-processor/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDtimers-processor-PROD-E2E: defaultPRODE2E.json +- CDtimers-processor-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDtimers-processor-PROD-E2E: +- name: CD_timers-processor PROD +- mzName: CD_timers-processor/management-zone/CDtimers-processor.name +- mzId: CD_timers-processor/management-zone/CDtimers-processor.id +- skipDeployment: "true" +#Configuration +CDtimers-processor-PROD-E2E.EMEA-Prod: +- name: CD_timers-processor PROD +- mzName: CD_timers-processor/management-zone/CDtimers-processor.name +- mzId: CD_timers-processor/management-zone/CDtimers-processor.id +- tag: timers-processor +- skipDeployment: "false" +CDtimers-processor-PROD-E2E.NA-Prod: +- name: CD_timers-processor PROD +- mzName: CD_timers-processor/management-zone/CDtimers-processor.name +- mzId: CD_timers-processor/management-zone/CDtimers-processor.id +- tag: timers-processor +- skipDeployment: "false" +CDtimers-processor-PROD-E2E.CN-Prod: +- name: CD_timers-processor PROD +- mzName: CD_timers-processor/management-zone/CDtimers-processor.name +- mzId: CD_timers-processor/management-zone/CDtimers-processor.id +- tag: timers-processor +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDtimers-processor-INT-TEST: +- name: CD_timers-processor INT-TEST +- mzName: CD_timers-processor/management-zone/CDtimers-processor.name +- mzId: CD_timers-processor/management-zone/CDtimers-processor.id +- tag: timers-processor +- skipDeployment: "true" +#Configuration +CDtimers-processor-INT-TEST.EMEA-PreProd: +- name: CD_timers-processor INT-TEST +- mzName: CD_timers-processor/management-zone/CDtimers-processor.name +- mzId: CD_timers-processor/management-zone/CDtimers-processor.id +- tag: timers-processor +- skipDeployment: "false" +CDtimers-processor-INT-TEST.NA-PreProd: +- name: CD_timers-processor INT-TEST +- mzName: CD_timers-processor/management-zone/CDtimers-processor.name +- mzId: CD_timers-processor/management-zone/CDtimers-processor.id +- env: INT +- skipDeployment: "false" +CDtimers-processor-INT-TEST.CN-PreProd: +- name: CD_timers-processor INT-TEST +- mzName: CD_timers-processor/management-zone/CDtimers-processor.name +- mzId: CD_timers-processor/management-zone/CDtimers-processor.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timers-processor/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_timers-processor/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_timers-processor/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timers-processor/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_timers-processor/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_timers-processor/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timers-processor/management-zone/README.md b/BMW-Dynatrace-config/CD_timers-processor/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_timers-processor/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_timers-processor/management-zone/default.json b/BMW-Dynatrace-config/CD_timers-processor/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_timers-processor/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timers-processor/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_timers-processor/management-zone/management-zone.yaml new file mode 100644 index 00000000..60965752 --- /dev/null +++ b/BMW-Dynatrace-config/CD_timers-processor/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDtimers-processor: default.json + +CDtimers-processor: +- name: CD_timers-processor +- tag: timers-processor diff --git a/BMW-Dynatrace-config/CD_timers-processor/notification/README.md b/BMW-Dynatrace-config/CD_timers-processor/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_timers-processor/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timers-processor/notification/email.json b/BMW-Dynatrace-config/CD_timers-processor/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_timers-processor/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timers-processor/notification/msTeams.json b/BMW-Dynatrace-config/CD_timers-processor/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_timers-processor/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timers-processor/notification/notification.yaml b/BMW-Dynatrace-config/CD_timers-processor/notification/notification.yaml new file mode 100644 index 00000000..9096b603 --- /dev/null +++ b/BMW-Dynatrace-config/CD_timers-processor/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDtimers-processor-PROD: msTeams.json +- CDtimers-processor-E2E: msTeams.json +- CDtimers-processor-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtimers-processor-PROD: +- name: CD_timers-processor PROD +- alertingProfile: CD_timers-processor/alerting-profile/CDtimers-processor-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtimers-processor-PROD.EMEA-Prod: +- name: CD_timers-processor PROD +- alertingProfile: CD_timers-processor/alerting-profile/CDtimers-processor-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDtimers-processor-PROD.NA-Prod: +- name: CD_timers-processor PROD +- alertingProfile: CD_timers-processor/alerting-profile/CDtimers-processor-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDtimers-processor-PROD.CN-Prod: +- name: CD_timers-processor PROD +- alertingProfile: CD_timers-processor/alerting-profile/CDtimers-processor-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtimers-processor-E2E: +- name: CD_timers-processor E2E +- alertingProfile: CD_timers-processor/alerting-profile/CDtimers-processor-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtimers-processor-E2E.EMEA-Prod: +- name: CD_timers-processor E2E +- alertingProfile: CD_timers-processor/alerting-profile/CDtimers-processor-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDtimers-processor-E2E.NA-Prod: +- name: CD_timers-processor E2E +- alertingProfile: CD_timers-processor/alerting-profile/CDtimers-processor-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDtimers-processor-E2E.CN-Prod: +- name: CD_timers-processor E2E +- alertingProfile: CD_timers-processor/alerting-profile/CDtimers-processor-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtimers-processor-INT: +- name: CD_timers-processor INT +- alertingProfile: CD_timers-processor/alerting-profile/CDtimers-processor-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtimers-processor-INT.EMEA-PreProd: +- name: CD_timers-processor INT +- alertingProfile: CD_timers-processor/alerting-profile/CDtimers-processor-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDtimers-processor-INT.NA-PreProd: +- name: CD_timers-processor INT +- alertingProfile: CD_timers-processor/alerting-profile/CDtimers-processor-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDtimers-processor-INT.CN-PreProd: +- name: CD_timers-processor INT +- alertingProfile: CD_timers-processor/alerting-profile/CDtimers-processor-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timers-processor/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_timers-processor/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_timers-processor/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timers-processor/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_timers-processor/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_timers-processor/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timers-processor/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_timers-processor/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..513eacda --- /dev/null +++ b/BMW-Dynatrace-config/CD_timers-processor/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- timers-processor: default.json + +timers-processor: +- name: CD_timers-processor - +- mzName: CD_timers-processor/management-zone/CDtimers-processor.name +- mzId: CD_timers-processor/management-zone/CDtimers-processor.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_token-exchanger-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_token-exchanger-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..1379baad --- /dev/null +++ b/BMW-Dynatrace-config/CD_token-exchanger-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDtoken-exchanger-service-PROD: default.json +- CDtoken-exchanger-service-E2E: default.json +- CDtoken-exchanger-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDtoken-exchanger-service-PROD: +- name: CD_token-exchanger-service PROD +- tag: token-exchanger-service +- mzId: CD_token-exchanger-service/management-zone/CDtoken-exchanger-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDtoken-exchanger-service-PROD.EMEA-Prod: +- name: CD_token-exchanger-service PROD +- tag: token-exchanger-service +- mzId: CD_token-exchanger-service/management-zone/CDtoken-exchanger-service.id +- env: PROD +- skipDeployment: "false" +CDtoken-exchanger-service-PROD.NA-Prod: +- name: CD_token-exchanger-service PROD +- tag: token-exchanger-service +- mzId: CD_token-exchanger-service/management-zone/CDtoken-exchanger-service.id +- env: PROD +- skipDeployment: "false" +CDtoken-exchanger-service-PROD.CN-Prod: +- name: CD_token-exchanger-service PROD +- tag: token-exchanger-service +- mzId: CD_token-exchanger-service/management-zone/CDtoken-exchanger-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDtoken-exchanger-service-E2E: +- name: CD_token-exchanger-service E2E +- tag: token-exchanger-service +- mzId: CD_token-exchanger-service/management-zone/CDtoken-exchanger-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDtoken-exchanger-service-E2E.EMEA-Prod: +- name: CD_token-exchanger-service E2E +- tag: token-exchanger-service +- mzId: CD_token-exchanger-service/management-zone/CDtoken-exchanger-service.id +- env: E2E +- skipDeployment: "false" +CDtoken-exchanger-service-E2E.NA-Prod: +- name: CD_token-exchanger-service E2E +- tag: token-exchanger-service +- mzId: CD_token-exchanger-service/management-zone/CDtoken-exchanger-service.id +- env: E2E +- skipDeployment: "false" +CDtoken-exchanger-service-E2E.CN-Prod: +- name: CD_token-exchanger-service E2E +- tag: token-exchanger-service +- mzId: CD_token-exchanger-service/management-zone/CDtoken-exchanger-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDtoken-exchanger-service-INT: +- name: CD_token-exchanger-service INT +- tag: token-exchanger-service +- mzId: CD_token-exchanger-service/management-zone/CDtoken-exchanger-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDtoken-exchanger-service-INT.EMEA-PreProd: +- name: CD_token-exchanger-service INT +- tag: token-exchanger-service +- mzId: CD_token-exchanger-service/management-zone/CDtoken-exchanger-service.id +- env: INT +- skipDeployment: "false" +CDtoken-exchanger-service-INT.NA-PreProd: +- name: CD_token-exchanger-service INT +- tag: token-exchanger-service +- mzId: CD_token-exchanger-service/management-zone/CDtoken-exchanger-service.id +- env: INT +- skipDeployment: "false" +CDtoken-exchanger-service-INT.CN-PreProd: +- name: CD_token-exchanger-service INT +- tag: token-exchanger-service +- mzId: CD_token-exchanger-service/management-zone/CDtoken-exchanger-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_token-exchanger-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_token-exchanger-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_token-exchanger-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_token-exchanger-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_token-exchanger-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_token-exchanger-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_token-exchanger-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_token-exchanger-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_token-exchanger-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_token-exchanger-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_token-exchanger-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_token-exchanger-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_token-exchanger-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_token-exchanger-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_token-exchanger-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_token-exchanger-service/dashboard/README.md b/BMW-Dynatrace-config/CD_token-exchanger-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_token-exchanger-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_token-exchanger-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_token-exchanger-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..877a3838 --- /dev/null +++ b/BMW-Dynatrace-config/CD_token-exchanger-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDtoken-exchanger-service-PROD-E2E: defaultPRODE2E.json +- CDtoken-exchanger-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDtoken-exchanger-service-PROD-E2E: +- name: CD_token-exchanger-service PROD +- mzName: CD_token-exchanger-service/management-zone/CDtoken-exchanger-service.name +- mzId: CD_token-exchanger-service/management-zone/CDtoken-exchanger-service.id +- skipDeployment: "true" +#Configuration +CDtoken-exchanger-service-PROD-E2E.EMEA-Prod: +- name: CD_token-exchanger-service PROD +- mzName: CD_token-exchanger-service/management-zone/CDtoken-exchanger-service.name +- mzId: CD_token-exchanger-service/management-zone/CDtoken-exchanger-service.id +- tag: token-exchanger-service +- skipDeployment: "false" +CDtoken-exchanger-service-PROD-E2E.NA-Prod: +- name: CD_token-exchanger-service PROD +- mzName: CD_token-exchanger-service/management-zone/CDtoken-exchanger-service.name +- mzId: CD_token-exchanger-service/management-zone/CDtoken-exchanger-service.id +- tag: token-exchanger-service +- skipDeployment: "false" +CDtoken-exchanger-service-PROD-E2E.CN-Prod: +- name: CD_token-exchanger-service PROD +- mzName: CD_token-exchanger-service/management-zone/CDtoken-exchanger-service.name +- mzId: CD_token-exchanger-service/management-zone/CDtoken-exchanger-service.id +- tag: token-exchanger-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDtoken-exchanger-service-INT-TEST: +- name: CD_token-exchanger-service INT-TEST +- mzName: CD_token-exchanger-service/management-zone/CDtoken-exchanger-service.name +- mzId: CD_token-exchanger-service/management-zone/CDtoken-exchanger-service.id +- tag: token-exchanger-service +- skipDeployment: "true" +#Configuration +CDtoken-exchanger-service-INT-TEST.EMEA-PreProd: +- name: CD_token-exchanger-service INT-TEST +- mzName: CD_token-exchanger-service/management-zone/CDtoken-exchanger-service.name +- mzId: CD_token-exchanger-service/management-zone/CDtoken-exchanger-service.id +- tag: token-exchanger-service +- skipDeployment: "false" +CDtoken-exchanger-service-INT-TEST.NA-PreProd: +- name: CD_token-exchanger-service INT-TEST +- mzName: CD_token-exchanger-service/management-zone/CDtoken-exchanger-service.name +- mzId: CD_token-exchanger-service/management-zone/CDtoken-exchanger-service.id +- env: INT +- skipDeployment: "false" +CDtoken-exchanger-service-INT-TEST.CN-PreProd: +- name: CD_token-exchanger-service INT-TEST +- mzName: CD_token-exchanger-service/management-zone/CDtoken-exchanger-service.name +- mzId: CD_token-exchanger-service/management-zone/CDtoken-exchanger-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_token-exchanger-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_token-exchanger-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_token-exchanger-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_token-exchanger-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_token-exchanger-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_token-exchanger-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_token-exchanger-service/management-zone/README.md b/BMW-Dynatrace-config/CD_token-exchanger-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_token-exchanger-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_token-exchanger-service/management-zone/default.json b/BMW-Dynatrace-config/CD_token-exchanger-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_token-exchanger-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_token-exchanger-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_token-exchanger-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..320efc9e --- /dev/null +++ b/BMW-Dynatrace-config/CD_token-exchanger-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDtoken-exchanger-service: default.json + +CDtoken-exchanger-service: +- name: CD_token-exchanger-service +- tag: token-exchanger-service diff --git a/BMW-Dynatrace-config/CD_token-exchanger-service/notification/README.md b/BMW-Dynatrace-config/CD_token-exchanger-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_token-exchanger-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_token-exchanger-service/notification/email.json b/BMW-Dynatrace-config/CD_token-exchanger-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_token-exchanger-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_token-exchanger-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_token-exchanger-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_token-exchanger-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_token-exchanger-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_token-exchanger-service/notification/notification.yaml new file mode 100644 index 00000000..7fad190c --- /dev/null +++ b/BMW-Dynatrace-config/CD_token-exchanger-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDtoken-exchanger-service-PROD: msTeams.json +- CDtoken-exchanger-service-E2E: msTeams.json +- CDtoken-exchanger-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtoken-exchanger-service-PROD: +- name: CD_token-exchanger-service PROD +- alertingProfile: CD_token-exchanger-service/alerting-profile/CDtoken-exchanger-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtoken-exchanger-service-PROD.EMEA-Prod: +- name: CD_token-exchanger-service PROD +- alertingProfile: CD_token-exchanger-service/alerting-profile/CDtoken-exchanger-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDtoken-exchanger-service-PROD.NA-Prod: +- name: CD_token-exchanger-service PROD +- alertingProfile: CD_token-exchanger-service/alerting-profile/CDtoken-exchanger-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDtoken-exchanger-service-PROD.CN-Prod: +- name: CD_token-exchanger-service PROD +- alertingProfile: CD_token-exchanger-service/alerting-profile/CDtoken-exchanger-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtoken-exchanger-service-E2E: +- name: CD_token-exchanger-service E2E +- alertingProfile: CD_token-exchanger-service/alerting-profile/CDtoken-exchanger-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtoken-exchanger-service-E2E.EMEA-Prod: +- name: CD_token-exchanger-service E2E +- alertingProfile: CD_token-exchanger-service/alerting-profile/CDtoken-exchanger-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDtoken-exchanger-service-E2E.NA-Prod: +- name: CD_token-exchanger-service E2E +- alertingProfile: CD_token-exchanger-service/alerting-profile/CDtoken-exchanger-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDtoken-exchanger-service-E2E.CN-Prod: +- name: CD_token-exchanger-service E2E +- alertingProfile: CD_token-exchanger-service/alerting-profile/CDtoken-exchanger-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtoken-exchanger-service-INT: +- name: CD_token-exchanger-service INT +- alertingProfile: CD_token-exchanger-service/alerting-profile/CDtoken-exchanger-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtoken-exchanger-service-INT.EMEA-PreProd: +- name: CD_token-exchanger-service INT +- alertingProfile: CD_token-exchanger-service/alerting-profile/CDtoken-exchanger-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDtoken-exchanger-service-INT.NA-PreProd: +- name: CD_token-exchanger-service INT +- alertingProfile: CD_token-exchanger-service/alerting-profile/CDtoken-exchanger-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDtoken-exchanger-service-INT.CN-PreProd: +- name: CD_token-exchanger-service INT +- alertingProfile: CD_token-exchanger-service/alerting-profile/CDtoken-exchanger-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_token-exchanger-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_token-exchanger-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_token-exchanger-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_token-exchanger-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_token-exchanger-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_token-exchanger-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_token-exchanger-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_token-exchanger-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..2ffd3267 --- /dev/null +++ b/BMW-Dynatrace-config/CD_token-exchanger-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- token-exchanger-service: default.json + +token-exchanger-service: +- name: CD_token-exchanger-service - +- mzName: CD_token-exchanger-service/management-zone/CDtoken-exchanger-service.name +- mzId: CD_token-exchanger-service/management-zone/CDtoken-exchanger-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-mgu/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_tol-mgu/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..dcd7defb --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-mgu/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDtol-mgu-PROD: default.json +- CDtol-mgu-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDtol-mgu-PROD: +- name: CD_tol-mgu PROD +- tag: tol-mgu +- mzId: CD_tol-mgu/management-zone/CDtol-mgu.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDtol-mgu-PROD.EMEA-Prod: +- name: CD_tol-mgu PROD +- tag: tol-mgu +- mzId: CD_tol-mgu/management-zone/CDtol-mgu.id +- env: PROD +- skipDeployment: "false" +CDtol-mgu-PROD.NA-Prod: +- name: CD_tol-mgu PROD +- tag: tol-mgu +- mzId: CD_tol-mgu/management-zone/CDtol-mgu.id +- env: PROD +- skipDeployment: "false" +CDtol-mgu-PROD.CN-Prod: +- name: CD_tol-mgu PROD +- tag: tol-mgu +- mzId: CD_tol-mgu/management-zone/CDtol-mgu.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDtol-mgu-INT: +- name: CD_tol-mgu INT +- tag: tol-mgu +- mzId: CD_tol-mgu/management-zone/CDtol-mgu.id +- env: INT +- skipDeployment: "true" +#Configuration +CDtol-mgu-INT.EMEA-PreProd: +- name: CD_tol-mgu INT +- tag: tol-mgu +- mzId: CD_tol-mgu/management-zone/CDtol-mgu.id +- env: INT +- skipDeployment: "false" +CDtol-mgu-INT.NA-PreProd: +- name: CD_tol-mgu INT +- tag: tol-mgu +- mzId: CD_tol-mgu/management-zone/CDtol-mgu.id +- env: INT +- skipDeployment: "false" +CDtol-mgu-INT.CN-PreProd: +- name: CD_tol-mgu INT +- tag: tol-mgu +- mzId: CD_tol-mgu/management-zone/CDtol-mgu.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-mgu/alerting-profile/default.json b/BMW-Dynatrace-config/CD_tol-mgu/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-mgu/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-mgu/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_tol-mgu/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-mgu/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-mgu/custom-service-java/README.md b/BMW-Dynatrace-config/CD_tol-mgu/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-mgu/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-mgu/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_tol-mgu/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-mgu/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-mgu/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_tol-mgu/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-mgu/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-mgu/dashboard/README.md b/BMW-Dynatrace-config/CD_tol-mgu/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-mgu/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-mgu/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_tol-mgu/dashboard/dashboard.yaml new file mode 100644 index 00000000..68e4cecb --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-mgu/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDtol-mgu-PROD-E2E: defaultPRODE2E.json +- CDtol-mgu-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDtol-mgu-PROD-E2E: +- name: CD_tol-mgu PROD-E2E +- mzName: CD_tol-mgu/management-zone/CDtol-mgu.name +- mzId: CD_tol-mgu/management-zone/CDtol-mgu.id +- skipDeployment: "true" +#Configuration +CDtol-mgu-PROD-E2E.EMEA-Prod: +- name: CD_tol-mgu PROD-E2E +- mzName: CD_tol-mgu/management-zone/CDtol-mgu.name +- mzId: CD_tol-mgu/management-zone/CDtol-mgu.id +- tag: tol-mgu +- skipDeployment: "false" +CDtol-mgu-PROD-E2E.NA-Prod: +- name: CD_tol-mgu PROD-E2E +- mzName: CD_tol-mgu/management-zone/CDtol-mgu.name +- mzId: CD_tol-mgu/management-zone/CDtol-mgu.id +- tag: tol-mgu +- skipDeployment: "false" +CDtol-mgu-PROD-E2E.CN-Prod: +- name: CD_tol-mgu PROD-E2E +- mzName: CD_tol-mgu/management-zone/CDtol-mgu.name +- mzId: CD_tol-mgu/management-zone/CDtol-mgu.id +- tag: tol-mgu +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDtol-mgu-INT-TEST: +- name: CD_tol-mgu INT-TEST +- mzName: CD_tol-mgu/management-zone/CDtol-mgu.name +- mzId: CD_tol-mgu/management-zone/CDtol-mgu.id +- tag: tol-mgu +- skipDeployment: "true" +#Configuration +CDtol-mgu-INT-TEST.EMEA-PreProd: +- name: CD_tol-mgu INT-TEST +- mzName: CD_tol-mgu/management-zone/CDtol-mgu.name +- mzId: CD_tol-mgu/management-zone/CDtol-mgu.id +- tag: tol-mgu +- skipDeployment: "false" +CDtol-mgu-INT-TEST.NA-PreProd: +- name: CD_tol-mgu INT-TEST +- mzName: CD_tol-mgu/management-zone/CDtol-mgu.name +- mzId: CD_tol-mgu/management-zone/CDtol-mgu.id +- env: INT +- skipDeployment: "false" +CDtol-mgu-INT-TEST.CN-PreProd: +- name: CD_tol-mgu INT-TEST +- mzName: CD_tol-mgu/management-zone/CDtol-mgu.name +- mzId: CD_tol-mgu/management-zone/CDtol-mgu.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-mgu/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_tol-mgu/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-mgu/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-mgu/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_tol-mgu/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-mgu/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-mgu/management-zone/README.md b/BMW-Dynatrace-config/CD_tol-mgu/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-mgu/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_tol-mgu/management-zone/default.json b/BMW-Dynatrace-config/CD_tol-mgu/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-mgu/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-mgu/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_tol-mgu/management-zone/management-zone.yaml new file mode 100644 index 00000000..d2c8cba7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-mgu/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDtol-mgu: default.json + +CDtol-mgu: +- name: CD_tol-mgu +- tag: tol-mgu diff --git a/BMW-Dynatrace-config/CD_tol-mgu/notification/README.md b/BMW-Dynatrace-config/CD_tol-mgu/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-mgu/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-mgu/notification/email.json b/BMW-Dynatrace-config/CD_tol-mgu/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-mgu/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-mgu/notification/msTeams.json b/BMW-Dynatrace-config/CD_tol-mgu/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-mgu/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-mgu/notification/notification.yaml b/BMW-Dynatrace-config/CD_tol-mgu/notification/notification.yaml new file mode 100644 index 00000000..833c379b --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-mgu/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDtol-mgu-PROD: msTeams.json +- CDtol-mgu-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtol-mgu-PROD: +- name: CD_tol-mgu PROD +- alertingProfile: CD_tol-mgu/alerting-profile/CDtol-mgu-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtol-mgu-PROD.EMEA-Prod: +- name: CD_tol-mgu PROD +- alertingProfile: CD_tol-mgu/alerting-profile/CDtol-mgu-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDtol-mgu-PROD.NA-Prod: +- name: CD_tol-mgu PROD +- alertingProfile: CD_tol-mgu/alerting-profile/CDtol-mgu-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDtol-mgu-PROD.CN-Prod: +- name: CD_tol-mgu PROD +- alertingProfile: CD_tol-mgu/alerting-profile/CDtol-mgu-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtol-mgu-INT: +- name: CD_tol-mgu INT +- alertingProfile: CD_tol-mgu/alerting-profile/CDtol-mgu-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtol-mgu-INT.EMEA-PreProd: +- name: CD_tol-mgu INT +- alertingProfile: CD_tol-mgu/alerting-profile/CDtol-mgu-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDtol-mgu-INT.NA-PreProd: +- name: CD_tol-mgu INT +- alertingProfile: CD_tol-mgu/alerting-profile/CDtol-mgu-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDtol-mgu-INT.CN-PreProd: +- name: CD_tol-mgu INT +- alertingProfile: CD_tol-mgu/alerting-profile/CDtol-mgu-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-mgu/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_tol-mgu/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-mgu/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-mgu/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_tol-mgu/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-mgu/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-mgu/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_tol-mgu/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..2948329b --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-mgu/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- tol-mgu: default.json + +tol-mgu: +- name: CD_tol-mgu - +- mzName: CD_tol-mgu/management-zone/CDtol-mgu.name +- mzId: CD_tol-mgu/management-zone/CDtol-mgu.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-tssb/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_tol-tssb/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..bfa03f88 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-tssb/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDtol-tssb-PROD: default.json +- CDtol-tssb-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDtol-tssb-PROD: +- name: CD_tol-tssb PROD +- tag: tol-tssb +- mzId: CD_tol-tssb/management-zone/CDtol-tssb.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDtol-tssb-PROD.EMEA-Prod: +- name: CD_tol-tssb PROD +- tag: tol-tssb +- mzId: CD_tol-tssb/management-zone/CDtol-tssb.id +- env: PROD +- skipDeployment: "false" +CDtol-tssb-PROD.NA-Prod: +- name: CD_tol-tssb PROD +- tag: tol-tssb +- mzId: CD_tol-tssb/management-zone/CDtol-tssb.id +- env: PROD +- skipDeployment: "false" +CDtol-tssb-PROD.CN-Prod: +- name: CD_tol-tssb PROD +- tag: tol-tssb +- mzId: CD_tol-tssb/management-zone/CDtol-tssb.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDtol-tssb-INT: +- name: CD_tol-tssb INT +- tag: tol-tssb +- mzId: CD_tol-tssb/management-zone/CDtol-tssb.id +- env: INT +- skipDeployment: "true" +#Configuration +CDtol-tssb-INT.EMEA-PreProd: +- name: CD_tol-tssb INT +- tag: tol-tssb +- mzId: CD_tol-tssb/management-zone/CDtol-tssb.id +- env: INT +- skipDeployment: "false" +CDtol-tssb-INT.NA-PreProd: +- name: CD_tol-tssb INT +- tag: tol-tssb +- mzId: CD_tol-tssb/management-zone/CDtol-tssb.id +- env: INT +- skipDeployment: "false" +CDtol-tssb-INT.CN-PreProd: +- name: CD_tol-tssb INT +- tag: tol-tssb +- mzId: CD_tol-tssb/management-zone/CDtol-tssb.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-tssb/alerting-profile/default.json b/BMW-Dynatrace-config/CD_tol-tssb/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-tssb/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-tssb/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_tol-tssb/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-tssb/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-tssb/custom-service-java/README.md b/BMW-Dynatrace-config/CD_tol-tssb/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-tssb/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-tssb/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_tol-tssb/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-tssb/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-tssb/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_tol-tssb/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-tssb/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-tssb/dashboard/README.md b/BMW-Dynatrace-config/CD_tol-tssb/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-tssb/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-tssb/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_tol-tssb/dashboard/dashboard.yaml new file mode 100644 index 00000000..7fb99755 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-tssb/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDtol-tssb-PROD-E2E: defaultPRODE2E.json +- CDtol-tssb-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDtol-tssb-PROD-E2E: +- name: CD_tol-tssb PROD-E2E +- mzName: CD_tol-tssb/management-zone/CDtol-tssb.name +- mzId: CD_tol-tssb/management-zone/CDtol-tssb.id +- skipDeployment: "true" +#Configuration +CDtol-tssb-PROD-E2E.EMEA-Prod: +- name: CD_tol-tssb PROD-E2E +- mzName: CD_tol-tssb/management-zone/CDtol-tssb.name +- mzId: CD_tol-tssb/management-zone/CDtol-tssb.id +- tag: tol-tssb +- skipDeployment: "false" +CDtol-tssb-PROD-E2E.NA-Prod: +- name: CD_tol-tssb PROD-E2E +- mzName: CD_tol-tssb/management-zone/CDtol-tssb.name +- mzId: CD_tol-tssb/management-zone/CDtol-tssb.id +- tag: tol-tssb +- skipDeployment: "false" +CDtol-tssb-PROD-E2E.CN-Prod: +- name: CD_tol-tssb PROD-E2E +- mzName: CD_tol-tssb/management-zone/CDtol-tssb.name +- mzId: CD_tol-tssb/management-zone/CDtol-tssb.id +- tag: tol-tssb +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDtol-tssb-INT-TEST: +- name: CD_tol-tssb INT-TEST +- mzName: CD_tol-tssb/management-zone/CDtol-tssb.name +- mzId: CD_tol-tssb/management-zone/CDtol-tssb.id +- tag: tol-tssb +- skipDeployment: "true" +#Configuration +CDtol-tssb-INT-TEST.EMEA-PreProd: +- name: CD_tol-tssb INT-TEST +- mzName: CD_tol-tssb/management-zone/CDtol-tssb.name +- mzId: CD_tol-tssb/management-zone/CDtol-tssb.id +- tag: tol-tssb +- skipDeployment: "false" +CDtol-tssb-INT-TEST.NA-PreProd: +- name: CD_tol-tssb INT-TEST +- mzName: CD_tol-tssb/management-zone/CDtol-tssb.name +- mzId: CD_tol-tssb/management-zone/CDtol-tssb.id +- env: INT +- skipDeployment: "false" +CDtol-tssb-INT-TEST.CN-PreProd: +- name: CD_tol-tssb INT-TEST +- mzName: CD_tol-tssb/management-zone/CDtol-tssb.name +- mzId: CD_tol-tssb/management-zone/CDtol-tssb.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-tssb/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_tol-tssb/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-tssb/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-tssb/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_tol-tssb/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-tssb/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-tssb/management-zone/README.md b/BMW-Dynatrace-config/CD_tol-tssb/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-tssb/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_tol-tssb/management-zone/default.json b/BMW-Dynatrace-config/CD_tol-tssb/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-tssb/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-tssb/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_tol-tssb/management-zone/management-zone.yaml new file mode 100644 index 00000000..86160018 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-tssb/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDtol-tssb: default.json + +CDtol-tssb: +- name: CD_tol-tssb +- tag: tol-tssb diff --git a/BMW-Dynatrace-config/CD_tol-tssb/notification/README.md b/BMW-Dynatrace-config/CD_tol-tssb/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-tssb/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-tssb/notification/email.json b/BMW-Dynatrace-config/CD_tol-tssb/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-tssb/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-tssb/notification/msTeams.json b/BMW-Dynatrace-config/CD_tol-tssb/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-tssb/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-tssb/notification/notification.yaml b/BMW-Dynatrace-config/CD_tol-tssb/notification/notification.yaml new file mode 100644 index 00000000..cd414f0f --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-tssb/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDtol-tssb-PROD: msTeams.json +- CDtol-tssb-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtol-tssb-PROD: +- name: CD_tol-tssb PROD +- alertingProfile: CD_tol-tssb/alerting-profile/CDtol-tssb-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtol-tssb-PROD.EMEA-Prod: +- name: CD_tol-tssb PROD +- alertingProfile: CD_tol-tssb/alerting-profile/CDtol-tssb-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDtol-tssb-PROD.NA-Prod: +- name: CD_tol-tssb PROD +- alertingProfile: CD_tol-tssb/alerting-profile/CDtol-tssb-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDtol-tssb-PROD.CN-Prod: +- name: CD_tol-tssb PROD +- alertingProfile: CD_tol-tssb/alerting-profile/CDtol-tssb-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtol-tssb-INT: +- name: CD_tol-tssb INT +- alertingProfile: CD_tol-tssb/alerting-profile/CDtol-tssb-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtol-tssb-INT.EMEA-PreProd: +- name: CD_tol-tssb INT +- alertingProfile: CD_tol-tssb/alerting-profile/CDtol-tssb-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDtol-tssb-INT.NA-PreProd: +- name: CD_tol-tssb INT +- alertingProfile: CD_tol-tssb/alerting-profile/CDtol-tssb-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDtol-tssb-INT.CN-PreProd: +- name: CD_tol-tssb INT +- alertingProfile: CD_tol-tssb/alerting-profile/CDtol-tssb-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-tssb/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_tol-tssb/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-tssb/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-tssb/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_tol-tssb/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-tssb/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-tssb/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_tol-tssb/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..b9208b8f --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-tssb/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- tol-tssb: default.json + +tol-tssb: +- name: CD_tol-tssb - +- mzName: CD_tol-tssb/management-zone/CDtol-tssb.name +- mzId: CD_tol-tssb/management-zone/CDtol-tssb.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_tol/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..db88d095 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDtol-PROD: default.json +- CDtol-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDtol-PROD: +- name: CD_tol PROD +- tag: tol +- mzId: CD_tol/management-zone/CDtol.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDtol-PROD.EMEA-Prod: +- name: CD_tol PROD +- tag: tol +- mzId: CD_tol/management-zone/CDtol.id +- env: PROD +- skipDeployment: "false" +CDtol-PROD.NA-Prod: +- name: CD_tol PROD +- tag: tol +- mzId: CD_tol/management-zone/CDtol.id +- env: PROD +- skipDeployment: "false" +CDtol-PROD.CN-Prod: +- name: CD_tol PROD +- tag: tol +- mzId: CD_tol/management-zone/CDtol.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDtol-INT: +- name: CD_tol INT +- tag: tol +- mzId: CD_tol/management-zone/CDtol.id +- env: INT +- skipDeployment: "true" +#Configuration +CDtol-INT.EMEA-PreProd: +- name: CD_tol INT +- tag: tol +- mzId: CD_tol/management-zone/CDtol.id +- env: INT +- skipDeployment: "false" +CDtol-INT.NA-PreProd: +- name: CD_tol INT +- tag: tol +- mzId: CD_tol/management-zone/CDtol.id +- env: INT +- skipDeployment: "false" +CDtol-INT.CN-PreProd: +- name: CD_tol INT +- tag: tol +- mzId: CD_tol/management-zone/CDtol.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol/alerting-profile/default.json b/BMW-Dynatrace-config/CD_tol/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_tol/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol/custom-service-java/README.md b/BMW-Dynatrace-config/CD_tol/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_tol/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_tol/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol/dashboard/README.md b/BMW-Dynatrace-config/CD_tol/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_tol/dashboard/dashboard.yaml new file mode 100644 index 00000000..f731d494 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDtol-PROD-E2E: defaultPRODE2E.json +- CDtol-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDtol-PROD-E2E: +- name: CD_tol PROD-E2E +- mzName: CD_tol/management-zone/CDtol.name +- mzId: CD_tol/management-zone/CDtol.id +- skipDeployment: "true" +#Configuration +CDtol-PROD-E2E.EMEA-Prod: +- name: CD_tol PROD-E2E +- mzName: CD_tol/management-zone/CDtol.name +- mzId: CD_tol/management-zone/CDtol.id +- tag: tol +- skipDeployment: "false" +CDtol-PROD-E2E.NA-Prod: +- name: CD_tol PROD-E2E +- mzName: CD_tol/management-zone/CDtol.name +- mzId: CD_tol/management-zone/CDtol.id +- tag: tol +- skipDeployment: "false" +CDtol-PROD-E2E.CN-Prod: +- name: CD_tol PROD-E2E +- mzName: CD_tol/management-zone/CDtol.name +- mzId: CD_tol/management-zone/CDtol.id +- tag: tol +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDtol-INT-TEST: +- name: CD_tol INT-TEST +- mzName: CD_tol/management-zone/CDtol.name +- mzId: CD_tol/management-zone/CDtol.id +- tag: tol +- skipDeployment: "true" +#Configuration +CDtol-INT-TEST.EMEA-PreProd: +- name: CD_tol INT-TEST +- mzName: CD_tol/management-zone/CDtol.name +- mzId: CD_tol/management-zone/CDtol.id +- tag: tol +- skipDeployment: "false" +CDtol-INT-TEST.NA-PreProd: +- name: CD_tol INT-TEST +- mzName: CD_tol/management-zone/CDtol.name +- mzId: CD_tol/management-zone/CDtol.id +- env: INT +- skipDeployment: "false" +CDtol-INT-TEST.CN-PreProd: +- name: CD_tol INT-TEST +- mzName: CD_tol/management-zone/CDtol.name +- mzId: CD_tol/management-zone/CDtol.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_tol/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_tol/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol/management-zone/README.md b/BMW-Dynatrace-config/CD_tol/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_tol/management-zone/default.json b/BMW-Dynatrace-config/CD_tol/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_tol/management-zone/management-zone.yaml new file mode 100644 index 00000000..9e02d3ad --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDtol: default.json + +CDtol: +- name: CD_tol +- tag: tol diff --git a/BMW-Dynatrace-config/CD_tol/notification/README.md b/BMW-Dynatrace-config/CD_tol/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol/notification/email.json b/BMW-Dynatrace-config/CD_tol/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol/notification/msTeams.json b/BMW-Dynatrace-config/CD_tol/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol/notification/notification.yaml b/BMW-Dynatrace-config/CD_tol/notification/notification.yaml new file mode 100644 index 00000000..d943e2bf --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDtol-PROD: msTeams.json +- CDtol-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtol-PROD: +- name: CD_tol PROD +- alertingProfile: CD_tol/alerting-profile/CDtol-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtol-PROD.EMEA-Prod: +- name: CD_tol PROD +- alertingProfile: CD_tol/alerting-profile/CDtol-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDtol-PROD.NA-Prod: +- name: CD_tol PROD +- alertingProfile: CD_tol/alerting-profile/CDtol-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDtol-PROD.CN-Prod: +- name: CD_tol PROD +- alertingProfile: CD_tol/alerting-profile/CDtol-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtol-INT: +- name: CD_tol INT +- alertingProfile: CD_tol/alerting-profile/CDtol-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtol-INT.EMEA-PreProd: +- name: CD_tol INT +- alertingProfile: CD_tol/alerting-profile/CDtol-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDtol-INT.NA-PreProd: +- name: CD_tol INT +- alertingProfile: CD_tol/alerting-profile/CDtol-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDtol-INT.CN-PreProd: +- name: CD_tol INT +- alertingProfile: CD_tol/alerting-profile/CDtol-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_tol/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_tol/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_tol/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..2b9847b0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- tol: default.json + +tol: +- name: CD_tol - +- mzName: CD_tol/management-zone/CDtol.name +- mzId: CD_tol/management-zone/CDtol.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-change-processor/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_trip-change-processor/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..56b4bd90 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-change-processor/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDtrip-change-processor-PROD: default.json +- CDtrip-change-processor-E2E: default.json +- CDtrip-change-processor-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDtrip-change-processor-PROD: +- name: CD_trip-change-processor PROD +- tag: trip-change-processor +- mzId: CD_trip-change-processor/management-zone/CDtrip-change-processor.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDtrip-change-processor-PROD.EMEA-Prod: +- name: CD_trip-change-processor PROD +- tag: trip-change-processor +- mzId: CD_trip-change-processor/management-zone/CDtrip-change-processor.id +- env: PROD +- skipDeployment: "false" +CDtrip-change-processor-PROD.NA-Prod: +- name: CD_trip-change-processor PROD +- tag: trip-change-processor +- mzId: CD_trip-change-processor/management-zone/CDtrip-change-processor.id +- env: PROD +- skipDeployment: "false" +CDtrip-change-processor-PROD.CN-Prod: +- name: CD_trip-change-processor PROD +- tag: trip-change-processor +- mzId: CD_trip-change-processor/management-zone/CDtrip-change-processor.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDtrip-change-processor-E2E: +- name: CD_trip-change-processor E2E +- tag: trip-change-processor +- mzId: CD_trip-change-processor/management-zone/CDtrip-change-processor.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDtrip-change-processor-E2E.EMEA-Prod: +- name: CD_trip-change-processor E2E +- tag: trip-change-processor +- mzId: CD_trip-change-processor/management-zone/CDtrip-change-processor.id +- env: E2E +- skipDeployment: "false" +CDtrip-change-processor-E2E.NA-Prod: +- name: CD_trip-change-processor E2E +- tag: trip-change-processor +- mzId: CD_trip-change-processor/management-zone/CDtrip-change-processor.id +- env: E2E +- skipDeployment: "false" +CDtrip-change-processor-E2E.CN-Prod: +- name: CD_trip-change-processor E2E +- tag: trip-change-processor +- mzId: CD_trip-change-processor/management-zone/CDtrip-change-processor.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDtrip-change-processor-INT: +- name: CD_trip-change-processor INT +- tag: trip-change-processor +- mzId: CD_trip-change-processor/management-zone/CDtrip-change-processor.id +- env: INT +- skipDeployment: "true" +#Configuration +CDtrip-change-processor-INT.EMEA-PreProd: +- name: CD_trip-change-processor INT +- tag: trip-change-processor +- mzId: CD_trip-change-processor/management-zone/CDtrip-change-processor.id +- env: INT +- skipDeployment: "false" +CDtrip-change-processor-INT.NA-PreProd: +- name: CD_trip-change-processor INT +- tag: trip-change-processor +- mzId: CD_trip-change-processor/management-zone/CDtrip-change-processor.id +- env: INT +- skipDeployment: "false" +CDtrip-change-processor-INT.CN-PreProd: +- name: CD_trip-change-processor INT +- tag: trip-change-processor +- mzId: CD_trip-change-processor/management-zone/CDtrip-change-processor.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-change-processor/alerting-profile/default.json b/BMW-Dynatrace-config/CD_trip-change-processor/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-change-processor/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-change-processor/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_trip-change-processor/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-change-processor/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-change-processor/custom-service-java/README.md b/BMW-Dynatrace-config/CD_trip-change-processor/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-change-processor/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-change-processor/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_trip-change-processor/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-change-processor/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-change-processor/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_trip-change-processor/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-change-processor/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-change-processor/dashboard/README.md b/BMW-Dynatrace-config/CD_trip-change-processor/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-change-processor/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-change-processor/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_trip-change-processor/dashboard/dashboard.yaml new file mode 100644 index 00000000..351e4c98 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-change-processor/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDtrip-change-processor-PROD-E2E: defaultPRODE2E.json +- CDtrip-change-processor-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDtrip-change-processor-PROD-E2E: +- name: CD_trip-change-processor PROD +- mzName: CD_trip-change-processor/management-zone/CDtrip-change-processor.name +- mzId: CD_trip-change-processor/management-zone/CDtrip-change-processor.id +- skipDeployment: "true" +#Configuration +CDtrip-change-processor-PROD-E2E.EMEA-Prod: +- name: CD_trip-change-processor PROD +- mzName: CD_trip-change-processor/management-zone/CDtrip-change-processor.name +- mzId: CD_trip-change-processor/management-zone/CDtrip-change-processor.id +- tag: trip-change-processor +- skipDeployment: "false" +CDtrip-change-processor-PROD-E2E.NA-Prod: +- name: CD_trip-change-processor PROD +- mzName: CD_trip-change-processor/management-zone/CDtrip-change-processor.name +- mzId: CD_trip-change-processor/management-zone/CDtrip-change-processor.id +- tag: trip-change-processor +- skipDeployment: "false" +CDtrip-change-processor-PROD-E2E.CN-Prod: +- name: CD_trip-change-processor PROD +- mzName: CD_trip-change-processor/management-zone/CDtrip-change-processor.name +- mzId: CD_trip-change-processor/management-zone/CDtrip-change-processor.id +- tag: trip-change-processor +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDtrip-change-processor-INT-TEST: +- name: CD_trip-change-processor INT-TEST +- mzName: CD_trip-change-processor/management-zone/CDtrip-change-processor.name +- mzId: CD_trip-change-processor/management-zone/CDtrip-change-processor.id +- tag: trip-change-processor +- skipDeployment: "true" +#Configuration +CDtrip-change-processor-INT-TEST.EMEA-PreProd: +- name: CD_trip-change-processor INT-TEST +- mzName: CD_trip-change-processor/management-zone/CDtrip-change-processor.name +- mzId: CD_trip-change-processor/management-zone/CDtrip-change-processor.id +- tag: trip-change-processor +- skipDeployment: "false" +CDtrip-change-processor-INT-TEST.NA-PreProd: +- name: CD_trip-change-processor INT-TEST +- mzName: CD_trip-change-processor/management-zone/CDtrip-change-processor.name +- mzId: CD_trip-change-processor/management-zone/CDtrip-change-processor.id +- env: INT +- skipDeployment: "false" +CDtrip-change-processor-INT-TEST.CN-PreProd: +- name: CD_trip-change-processor INT-TEST +- mzName: CD_trip-change-processor/management-zone/CDtrip-change-processor.name +- mzId: CD_trip-change-processor/management-zone/CDtrip-change-processor.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-change-processor/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_trip-change-processor/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-change-processor/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-change-processor/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_trip-change-processor/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-change-processor/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-change-processor/management-zone/README.md b/BMW-Dynatrace-config/CD_trip-change-processor/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-change-processor/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_trip-change-processor/management-zone/default.json b/BMW-Dynatrace-config/CD_trip-change-processor/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-change-processor/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-change-processor/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_trip-change-processor/management-zone/management-zone.yaml new file mode 100644 index 00000000..f63528b8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-change-processor/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDtrip-change-processor: default.json + +CDtrip-change-processor: +- name: CD_trip-change-processor +- tag: trip-change-processor diff --git a/BMW-Dynatrace-config/CD_trip-change-processor/notification/README.md b/BMW-Dynatrace-config/CD_trip-change-processor/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-change-processor/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-change-processor/notification/email.json b/BMW-Dynatrace-config/CD_trip-change-processor/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-change-processor/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-change-processor/notification/msTeams.json b/BMW-Dynatrace-config/CD_trip-change-processor/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-change-processor/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-change-processor/notification/notification.yaml b/BMW-Dynatrace-config/CD_trip-change-processor/notification/notification.yaml new file mode 100644 index 00000000..13a1dd76 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-change-processor/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDtrip-change-processor-PROD: msTeams.json +- CDtrip-change-processor-E2E: msTeams.json +- CDtrip-change-processor-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtrip-change-processor-PROD: +- name: CD_trip-change-processor PROD +- alertingProfile: CD_trip-change-processor/alerting-profile/CDtrip-change-processor-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtrip-change-processor-PROD.EMEA-Prod: +- name: CD_trip-change-processor PROD +- alertingProfile: CD_trip-change-processor/alerting-profile/CDtrip-change-processor-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDtrip-change-processor-PROD.NA-Prod: +- name: CD_trip-change-processor PROD +- alertingProfile: CD_trip-change-processor/alerting-profile/CDtrip-change-processor-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDtrip-change-processor-PROD.CN-Prod: +- name: CD_trip-change-processor PROD +- alertingProfile: CD_trip-change-processor/alerting-profile/CDtrip-change-processor-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtrip-change-processor-E2E: +- name: CD_trip-change-processor E2E +- alertingProfile: CD_trip-change-processor/alerting-profile/CDtrip-change-processor-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtrip-change-processor-E2E.EMEA-Prod: +- name: CD_trip-change-processor E2E +- alertingProfile: CD_trip-change-processor/alerting-profile/CDtrip-change-processor-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDtrip-change-processor-E2E.NA-Prod: +- name: CD_trip-change-processor E2E +- alertingProfile: CD_trip-change-processor/alerting-profile/CDtrip-change-processor-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDtrip-change-processor-E2E.CN-Prod: +- name: CD_trip-change-processor E2E +- alertingProfile: CD_trip-change-processor/alerting-profile/CDtrip-change-processor-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtrip-change-processor-INT: +- name: CD_trip-change-processor INT +- alertingProfile: CD_trip-change-processor/alerting-profile/CDtrip-change-processor-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtrip-change-processor-INT.EMEA-PreProd: +- name: CD_trip-change-processor INT +- alertingProfile: CD_trip-change-processor/alerting-profile/CDtrip-change-processor-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDtrip-change-processor-INT.NA-PreProd: +- name: CD_trip-change-processor INT +- alertingProfile: CD_trip-change-processor/alerting-profile/CDtrip-change-processor-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDtrip-change-processor-INT.CN-PreProd: +- name: CD_trip-change-processor INT +- alertingProfile: CD_trip-change-processor/alerting-profile/CDtrip-change-processor-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-change-processor/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_trip-change-processor/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-change-processor/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-change-processor/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_trip-change-processor/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-change-processor/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-change-processor/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_trip-change-processor/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..c9503a53 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-change-processor/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- trip-change-processor: default.json + +trip-change-processor: +- name: CD_trip-change-processor - +- mzName: CD_trip-change-processor/management-zone/CDtrip-change-processor.name +- mzId: CD_trip-change-processor/management-zone/CDtrip-change-processor.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-cleanup-app-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..dc170084 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDtrip-cleanup-app-service-PROD: default.json +- CDtrip-cleanup-app-service-E2E: default.json +- CDtrip-cleanup-app-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDtrip-cleanup-app-service-PROD: +- name: CD_trip-cleanup-app-service PROD +- tag: trip-cleanup-app-service +- mzId: CD_trip-cleanup-app-service/management-zone/CDtrip-cleanup-app-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDtrip-cleanup-app-service-PROD.EMEA-Prod: +- name: CD_trip-cleanup-app-service PROD +- tag: trip-cleanup-app-service +- mzId: CD_trip-cleanup-app-service/management-zone/CDtrip-cleanup-app-service.id +- env: PROD +- skipDeployment: "false" +CDtrip-cleanup-app-service-PROD.NA-Prod: +- name: CD_trip-cleanup-app-service PROD +- tag: trip-cleanup-app-service +- mzId: CD_trip-cleanup-app-service/management-zone/CDtrip-cleanup-app-service.id +- env: PROD +- skipDeployment: "false" +CDtrip-cleanup-app-service-PROD.CN-Prod: +- name: CD_trip-cleanup-app-service PROD +- tag: trip-cleanup-app-service +- mzId: CD_trip-cleanup-app-service/management-zone/CDtrip-cleanup-app-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDtrip-cleanup-app-service-E2E: +- name: CD_trip-cleanup-app-service E2E +- tag: trip-cleanup-app-service +- mzId: CD_trip-cleanup-app-service/management-zone/CDtrip-cleanup-app-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDtrip-cleanup-app-service-E2E.EMEA-Prod: +- name: CD_trip-cleanup-app-service E2E +- tag: trip-cleanup-app-service +- mzId: CD_trip-cleanup-app-service/management-zone/CDtrip-cleanup-app-service.id +- env: E2E +- skipDeployment: "false" +CDtrip-cleanup-app-service-E2E.NA-Prod: +- name: CD_trip-cleanup-app-service E2E +- tag: trip-cleanup-app-service +- mzId: CD_trip-cleanup-app-service/management-zone/CDtrip-cleanup-app-service.id +- env: E2E +- skipDeployment: "false" +CDtrip-cleanup-app-service-E2E.CN-Prod: +- name: CD_trip-cleanup-app-service E2E +- tag: trip-cleanup-app-service +- mzId: CD_trip-cleanup-app-service/management-zone/CDtrip-cleanup-app-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDtrip-cleanup-app-service-INT: +- name: CD_trip-cleanup-app-service INT +- tag: trip-cleanup-app-service +- mzId: CD_trip-cleanup-app-service/management-zone/CDtrip-cleanup-app-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDtrip-cleanup-app-service-INT.EMEA-PreProd: +- name: CD_trip-cleanup-app-service INT +- tag: trip-cleanup-app-service +- mzId: CD_trip-cleanup-app-service/management-zone/CDtrip-cleanup-app-service.id +- env: INT +- skipDeployment: "false" +CDtrip-cleanup-app-service-INT.NA-PreProd: +- name: CD_trip-cleanup-app-service INT +- tag: trip-cleanup-app-service +- mzId: CD_trip-cleanup-app-service/management-zone/CDtrip-cleanup-app-service.id +- env: INT +- skipDeployment: "false" +CDtrip-cleanup-app-service-INT.CN-PreProd: +- name: CD_trip-cleanup-app-service INT +- tag: trip-cleanup-app-service +- mzId: CD_trip-cleanup-app-service/management-zone/CDtrip-cleanup-app-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-cleanup-app-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-cleanup-app-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-cleanup-app-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-cleanup-app-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-cleanup-app-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-cleanup-app-service/dashboard/README.md b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-cleanup-app-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..3cddc2fd --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDtrip-cleanup-app-service-PROD-E2E: defaultPRODE2E.json +- CDtrip-cleanup-app-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDtrip-cleanup-app-service-PROD-E2E: +- name: CD_trip-cleanup-app-service PROD +- mzName: CD_trip-cleanup-app-service/management-zone/CDtrip-cleanup-app-service.name +- mzId: CD_trip-cleanup-app-service/management-zone/CDtrip-cleanup-app-service.id +- skipDeployment: "true" +#Configuration +CDtrip-cleanup-app-service-PROD-E2E.EMEA-Prod: +- name: CD_trip-cleanup-app-service PROD +- mzName: CD_trip-cleanup-app-service/management-zone/CDtrip-cleanup-app-service.name +- mzId: CD_trip-cleanup-app-service/management-zone/CDtrip-cleanup-app-service.id +- tag: trip-cleanup-app-service +- skipDeployment: "false" +CDtrip-cleanup-app-service-PROD-E2E.NA-Prod: +- name: CD_trip-cleanup-app-service PROD +- mzName: CD_trip-cleanup-app-service/management-zone/CDtrip-cleanup-app-service.name +- mzId: CD_trip-cleanup-app-service/management-zone/CDtrip-cleanup-app-service.id +- tag: trip-cleanup-app-service +- skipDeployment: "false" +CDtrip-cleanup-app-service-PROD-E2E.CN-Prod: +- name: CD_trip-cleanup-app-service PROD +- mzName: CD_trip-cleanup-app-service/management-zone/CDtrip-cleanup-app-service.name +- mzId: CD_trip-cleanup-app-service/management-zone/CDtrip-cleanup-app-service.id +- tag: trip-cleanup-app-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDtrip-cleanup-app-service-INT-TEST: +- name: CD_trip-cleanup-app-service INT-TEST +- mzName: CD_trip-cleanup-app-service/management-zone/CDtrip-cleanup-app-service.name +- mzId: CD_trip-cleanup-app-service/management-zone/CDtrip-cleanup-app-service.id +- tag: trip-cleanup-app-service +- skipDeployment: "true" +#Configuration +CDtrip-cleanup-app-service-INT-TEST.EMEA-PreProd: +- name: CD_trip-cleanup-app-service INT-TEST +- mzName: CD_trip-cleanup-app-service/management-zone/CDtrip-cleanup-app-service.name +- mzId: CD_trip-cleanup-app-service/management-zone/CDtrip-cleanup-app-service.id +- tag: trip-cleanup-app-service +- skipDeployment: "false" +CDtrip-cleanup-app-service-INT-TEST.NA-PreProd: +- name: CD_trip-cleanup-app-service INT-TEST +- mzName: CD_trip-cleanup-app-service/management-zone/CDtrip-cleanup-app-service.name +- mzId: CD_trip-cleanup-app-service/management-zone/CDtrip-cleanup-app-service.id +- env: INT +- skipDeployment: "false" +CDtrip-cleanup-app-service-INT-TEST.CN-PreProd: +- name: CD_trip-cleanup-app-service INT-TEST +- mzName: CD_trip-cleanup-app-service/management-zone/CDtrip-cleanup-app-service.name +- mzId: CD_trip-cleanup-app-service/management-zone/CDtrip-cleanup-app-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-cleanup-app-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-cleanup-app-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-cleanup-app-service/management-zone/README.md b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_trip-cleanup-app-service/management-zone/default.json b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-cleanup-app-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..8238d7d5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDtrip-cleanup-app-service: default.json + +CDtrip-cleanup-app-service: +- name: CD_trip-cleanup-app-service +- tag: trip-cleanup-app-service diff --git a/BMW-Dynatrace-config/CD_trip-cleanup-app-service/notification/README.md b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-cleanup-app-service/notification/email.json b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-cleanup-app-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-cleanup-app-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/notification/notification.yaml new file mode 100644 index 00000000..c28c373a --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDtrip-cleanup-app-service-PROD: msTeams.json +- CDtrip-cleanup-app-service-E2E: msTeams.json +- CDtrip-cleanup-app-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtrip-cleanup-app-service-PROD: +- name: CD_trip-cleanup-app-service PROD +- alertingProfile: CD_trip-cleanup-app-service/alerting-profile/CDtrip-cleanup-app-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtrip-cleanup-app-service-PROD.EMEA-Prod: +- name: CD_trip-cleanup-app-service PROD +- alertingProfile: CD_trip-cleanup-app-service/alerting-profile/CDtrip-cleanup-app-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDtrip-cleanup-app-service-PROD.NA-Prod: +- name: CD_trip-cleanup-app-service PROD +- alertingProfile: CD_trip-cleanup-app-service/alerting-profile/CDtrip-cleanup-app-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDtrip-cleanup-app-service-PROD.CN-Prod: +- name: CD_trip-cleanup-app-service PROD +- alertingProfile: CD_trip-cleanup-app-service/alerting-profile/CDtrip-cleanup-app-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtrip-cleanup-app-service-E2E: +- name: CD_trip-cleanup-app-service E2E +- alertingProfile: CD_trip-cleanup-app-service/alerting-profile/CDtrip-cleanup-app-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtrip-cleanup-app-service-E2E.EMEA-Prod: +- name: CD_trip-cleanup-app-service E2E +- alertingProfile: CD_trip-cleanup-app-service/alerting-profile/CDtrip-cleanup-app-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDtrip-cleanup-app-service-E2E.NA-Prod: +- name: CD_trip-cleanup-app-service E2E +- alertingProfile: CD_trip-cleanup-app-service/alerting-profile/CDtrip-cleanup-app-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDtrip-cleanup-app-service-E2E.CN-Prod: +- name: CD_trip-cleanup-app-service E2E +- alertingProfile: CD_trip-cleanup-app-service/alerting-profile/CDtrip-cleanup-app-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtrip-cleanup-app-service-INT: +- name: CD_trip-cleanup-app-service INT +- alertingProfile: CD_trip-cleanup-app-service/alerting-profile/CDtrip-cleanup-app-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtrip-cleanup-app-service-INT.EMEA-PreProd: +- name: CD_trip-cleanup-app-service INT +- alertingProfile: CD_trip-cleanup-app-service/alerting-profile/CDtrip-cleanup-app-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDtrip-cleanup-app-service-INT.NA-PreProd: +- name: CD_trip-cleanup-app-service INT +- alertingProfile: CD_trip-cleanup-app-service/alerting-profile/CDtrip-cleanup-app-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDtrip-cleanup-app-service-INT.CN-PreProd: +- name: CD_trip-cleanup-app-service INT +- alertingProfile: CD_trip-cleanup-app-service/alerting-profile/CDtrip-cleanup-app-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-cleanup-app-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-cleanup-app-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-cleanup-app-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..de0dd710 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- trip-cleanup-app-service: default.json + +trip-cleanup-app-service: +- name: CD_trip-cleanup-app-service - +- mzName: CD_trip-cleanup-app-service/management-zone/CDtrip-cleanup-app-service.name +- mzId: CD_trip-cleanup-app-service/management-zone/CDtrip-cleanup-app-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-monitor-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_trip-monitor-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..081f6a49 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-monitor-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDtrip-monitor-service-PROD: default.json +- CDtrip-monitor-service-E2E: default.json +- CDtrip-monitor-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDtrip-monitor-service-PROD: +- name: CD_trip-monitor-service PROD +- tag: trip-monitor-service +- mzId: CD_trip-monitor-service/management-zone/CDtrip-monitor-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDtrip-monitor-service-PROD.EMEA-Prod: +- name: CD_trip-monitor-service PROD +- tag: trip-monitor-service +- mzId: CD_trip-monitor-service/management-zone/CDtrip-monitor-service.id +- env: PROD +- skipDeployment: "false" +CDtrip-monitor-service-PROD.NA-Prod: +- name: CD_trip-monitor-service PROD +- tag: trip-monitor-service +- mzId: CD_trip-monitor-service/management-zone/CDtrip-monitor-service.id +- env: PROD +- skipDeployment: "false" +CDtrip-monitor-service-PROD.CN-Prod: +- name: CD_trip-monitor-service PROD +- tag: trip-monitor-service +- mzId: CD_trip-monitor-service/management-zone/CDtrip-monitor-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDtrip-monitor-service-E2E: +- name: CD_trip-monitor-service E2E +- tag: trip-monitor-service +- mzId: CD_trip-monitor-service/management-zone/CDtrip-monitor-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDtrip-monitor-service-E2E.EMEA-Prod: +- name: CD_trip-monitor-service E2E +- tag: trip-monitor-service +- mzId: CD_trip-monitor-service/management-zone/CDtrip-monitor-service.id +- env: E2E +- skipDeployment: "false" +CDtrip-monitor-service-E2E.NA-Prod: +- name: CD_trip-monitor-service E2E +- tag: trip-monitor-service +- mzId: CD_trip-monitor-service/management-zone/CDtrip-monitor-service.id +- env: E2E +- skipDeployment: "false" +CDtrip-monitor-service-E2E.CN-Prod: +- name: CD_trip-monitor-service E2E +- tag: trip-monitor-service +- mzId: CD_trip-monitor-service/management-zone/CDtrip-monitor-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDtrip-monitor-service-INT: +- name: CD_trip-monitor-service INT +- tag: trip-monitor-service +- mzId: CD_trip-monitor-service/management-zone/CDtrip-monitor-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDtrip-monitor-service-INT.EMEA-PreProd: +- name: CD_trip-monitor-service INT +- tag: trip-monitor-service +- mzId: CD_trip-monitor-service/management-zone/CDtrip-monitor-service.id +- env: INT +- skipDeployment: "false" +CDtrip-monitor-service-INT.NA-PreProd: +- name: CD_trip-monitor-service INT +- tag: trip-monitor-service +- mzId: CD_trip-monitor-service/management-zone/CDtrip-monitor-service.id +- env: INT +- skipDeployment: "false" +CDtrip-monitor-service-INT.CN-PreProd: +- name: CD_trip-monitor-service INT +- tag: trip-monitor-service +- mzId: CD_trip-monitor-service/management-zone/CDtrip-monitor-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-monitor-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_trip-monitor-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-monitor-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-monitor-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_trip-monitor-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-monitor-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-monitor-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_trip-monitor-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-monitor-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-monitor-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_trip-monitor-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-monitor-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-monitor-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_trip-monitor-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-monitor-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-monitor-service/dashboard/README.md b/BMW-Dynatrace-config/CD_trip-monitor-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-monitor-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-monitor-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_trip-monitor-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..37926632 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-monitor-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDtrip-monitor-service-PROD-E2E: defaultPRODE2E.json +- CDtrip-monitor-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDtrip-monitor-service-PROD-E2E: +- name: CD_trip-monitor-service PROD +- mzName: CD_trip-monitor-service/management-zone/CDtrip-monitor-service.name +- mzId: CD_trip-monitor-service/management-zone/CDtrip-monitor-service.id +- skipDeployment: "true" +#Configuration +CDtrip-monitor-service-PROD-E2E.EMEA-Prod: +- name: CD_trip-monitor-service PROD +- mzName: CD_trip-monitor-service/management-zone/CDtrip-monitor-service.name +- mzId: CD_trip-monitor-service/management-zone/CDtrip-monitor-service.id +- tag: trip-monitor-service +- skipDeployment: "false" +CDtrip-monitor-service-PROD-E2E.NA-Prod: +- name: CD_trip-monitor-service PROD +- mzName: CD_trip-monitor-service/management-zone/CDtrip-monitor-service.name +- mzId: CD_trip-monitor-service/management-zone/CDtrip-monitor-service.id +- tag: trip-monitor-service +- skipDeployment: "false" +CDtrip-monitor-service-PROD-E2E.CN-Prod: +- name: CD_trip-monitor-service PROD +- mzName: CD_trip-monitor-service/management-zone/CDtrip-monitor-service.name +- mzId: CD_trip-monitor-service/management-zone/CDtrip-monitor-service.id +- tag: trip-monitor-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDtrip-monitor-service-INT-TEST: +- name: CD_trip-monitor-service INT-TEST +- mzName: CD_trip-monitor-service/management-zone/CDtrip-monitor-service.name +- mzId: CD_trip-monitor-service/management-zone/CDtrip-monitor-service.id +- tag: trip-monitor-service +- skipDeployment: "true" +#Configuration +CDtrip-monitor-service-INT-TEST.EMEA-PreProd: +- name: CD_trip-monitor-service INT-TEST +- mzName: CD_trip-monitor-service/management-zone/CDtrip-monitor-service.name +- mzId: CD_trip-monitor-service/management-zone/CDtrip-monitor-service.id +- tag: trip-monitor-service +- skipDeployment: "false" +CDtrip-monitor-service-INT-TEST.NA-PreProd: +- name: CD_trip-monitor-service INT-TEST +- mzName: CD_trip-monitor-service/management-zone/CDtrip-monitor-service.name +- mzId: CD_trip-monitor-service/management-zone/CDtrip-monitor-service.id +- env: INT +- skipDeployment: "false" +CDtrip-monitor-service-INT-TEST.CN-PreProd: +- name: CD_trip-monitor-service INT-TEST +- mzName: CD_trip-monitor-service/management-zone/CDtrip-monitor-service.name +- mzId: CD_trip-monitor-service/management-zone/CDtrip-monitor-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-monitor-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_trip-monitor-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-monitor-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-monitor-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_trip-monitor-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-monitor-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-monitor-service/management-zone/README.md b/BMW-Dynatrace-config/CD_trip-monitor-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-monitor-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_trip-monitor-service/management-zone/default.json b/BMW-Dynatrace-config/CD_trip-monitor-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-monitor-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-monitor-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_trip-monitor-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..6ba902d1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-monitor-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDtrip-monitor-service: default.json + +CDtrip-monitor-service: +- name: CD_trip-monitor-service +- tag: trip-monitor-service diff --git a/BMW-Dynatrace-config/CD_trip-monitor-service/notification/README.md b/BMW-Dynatrace-config/CD_trip-monitor-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-monitor-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-monitor-service/notification/email.json b/BMW-Dynatrace-config/CD_trip-monitor-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-monitor-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-monitor-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_trip-monitor-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-monitor-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-monitor-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_trip-monitor-service/notification/notification.yaml new file mode 100644 index 00000000..15b3110a --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-monitor-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDtrip-monitor-service-PROD: msTeams.json +- CDtrip-monitor-service-E2E: msTeams.json +- CDtrip-monitor-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtrip-monitor-service-PROD: +- name: CD_trip-monitor-service PROD +- alertingProfile: CD_trip-monitor-service/alerting-profile/CDtrip-monitor-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtrip-monitor-service-PROD.EMEA-Prod: +- name: CD_trip-monitor-service PROD +- alertingProfile: CD_trip-monitor-service/alerting-profile/CDtrip-monitor-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDtrip-monitor-service-PROD.NA-Prod: +- name: CD_trip-monitor-service PROD +- alertingProfile: CD_trip-monitor-service/alerting-profile/CDtrip-monitor-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDtrip-monitor-service-PROD.CN-Prod: +- name: CD_trip-monitor-service PROD +- alertingProfile: CD_trip-monitor-service/alerting-profile/CDtrip-monitor-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtrip-monitor-service-E2E: +- name: CD_trip-monitor-service E2E +- alertingProfile: CD_trip-monitor-service/alerting-profile/CDtrip-monitor-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtrip-monitor-service-E2E.EMEA-Prod: +- name: CD_trip-monitor-service E2E +- alertingProfile: CD_trip-monitor-service/alerting-profile/CDtrip-monitor-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDtrip-monitor-service-E2E.NA-Prod: +- name: CD_trip-monitor-service E2E +- alertingProfile: CD_trip-monitor-service/alerting-profile/CDtrip-monitor-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDtrip-monitor-service-E2E.CN-Prod: +- name: CD_trip-monitor-service E2E +- alertingProfile: CD_trip-monitor-service/alerting-profile/CDtrip-monitor-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtrip-monitor-service-INT: +- name: CD_trip-monitor-service INT +- alertingProfile: CD_trip-monitor-service/alerting-profile/CDtrip-monitor-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtrip-monitor-service-INT.EMEA-PreProd: +- name: CD_trip-monitor-service INT +- alertingProfile: CD_trip-monitor-service/alerting-profile/CDtrip-monitor-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDtrip-monitor-service-INT.NA-PreProd: +- name: CD_trip-monitor-service INT +- alertingProfile: CD_trip-monitor-service/alerting-profile/CDtrip-monitor-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDtrip-monitor-service-INT.CN-PreProd: +- name: CD_trip-monitor-service INT +- alertingProfile: CD_trip-monitor-service/alerting-profile/CDtrip-monitor-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-monitor-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_trip-monitor-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-monitor-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-monitor-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_trip-monitor-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-monitor-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-monitor-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_trip-monitor-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..2f5d0677 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-monitor-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- trip-monitor-service: default.json + +trip-monitor-service: +- name: CD_trip-monitor-service - +- mzName: CD_trip-monitor-service/management-zone/CDtrip-monitor-service.name +- mzId: CD_trip-monitor-service/management-zone/CDtrip-monitor-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-reminder-processor/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_trip-reminder-processor/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..9dc44588 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-reminder-processor/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDtrip-reminder-processor-PROD: default.json +- CDtrip-reminder-processor-E2E: default.json +- CDtrip-reminder-processor-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDtrip-reminder-processor-PROD: +- name: CD_trip-reminder-processor PROD +- tag: trip-reminder-processor +- mzId: CD_trip-reminder-processor/management-zone/CDtrip-reminder-processor.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDtrip-reminder-processor-PROD.EMEA-Prod: +- name: CD_trip-reminder-processor PROD +- tag: trip-reminder-processor +- mzId: CD_trip-reminder-processor/management-zone/CDtrip-reminder-processor.id +- env: PROD +- skipDeployment: "false" +CDtrip-reminder-processor-PROD.NA-Prod: +- name: CD_trip-reminder-processor PROD +- tag: trip-reminder-processor +- mzId: CD_trip-reminder-processor/management-zone/CDtrip-reminder-processor.id +- env: PROD +- skipDeployment: "false" +CDtrip-reminder-processor-PROD.CN-Prod: +- name: CD_trip-reminder-processor PROD +- tag: trip-reminder-processor +- mzId: CD_trip-reminder-processor/management-zone/CDtrip-reminder-processor.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDtrip-reminder-processor-E2E: +- name: CD_trip-reminder-processor E2E +- tag: trip-reminder-processor +- mzId: CD_trip-reminder-processor/management-zone/CDtrip-reminder-processor.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDtrip-reminder-processor-E2E.EMEA-Prod: +- name: CD_trip-reminder-processor E2E +- tag: trip-reminder-processor +- mzId: CD_trip-reminder-processor/management-zone/CDtrip-reminder-processor.id +- env: E2E +- skipDeployment: "false" +CDtrip-reminder-processor-E2E.NA-Prod: +- name: CD_trip-reminder-processor E2E +- tag: trip-reminder-processor +- mzId: CD_trip-reminder-processor/management-zone/CDtrip-reminder-processor.id +- env: E2E +- skipDeployment: "false" +CDtrip-reminder-processor-E2E.CN-Prod: +- name: CD_trip-reminder-processor E2E +- tag: trip-reminder-processor +- mzId: CD_trip-reminder-processor/management-zone/CDtrip-reminder-processor.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDtrip-reminder-processor-INT: +- name: CD_trip-reminder-processor INT +- tag: trip-reminder-processor +- mzId: CD_trip-reminder-processor/management-zone/CDtrip-reminder-processor.id +- env: INT +- skipDeployment: "true" +#Configuration +CDtrip-reminder-processor-INT.EMEA-PreProd: +- name: CD_trip-reminder-processor INT +- tag: trip-reminder-processor +- mzId: CD_trip-reminder-processor/management-zone/CDtrip-reminder-processor.id +- env: INT +- skipDeployment: "false" +CDtrip-reminder-processor-INT.NA-PreProd: +- name: CD_trip-reminder-processor INT +- tag: trip-reminder-processor +- mzId: CD_trip-reminder-processor/management-zone/CDtrip-reminder-processor.id +- env: INT +- skipDeployment: "false" +CDtrip-reminder-processor-INT.CN-PreProd: +- name: CD_trip-reminder-processor INT +- tag: trip-reminder-processor +- mzId: CD_trip-reminder-processor/management-zone/CDtrip-reminder-processor.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-reminder-processor/alerting-profile/default.json b/BMW-Dynatrace-config/CD_trip-reminder-processor/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-reminder-processor/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-reminder-processor/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_trip-reminder-processor/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-reminder-processor/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-reminder-processor/custom-service-java/README.md b/BMW-Dynatrace-config/CD_trip-reminder-processor/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-reminder-processor/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-reminder-processor/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_trip-reminder-processor/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-reminder-processor/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-reminder-processor/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_trip-reminder-processor/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-reminder-processor/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-reminder-processor/dashboard/README.md b/BMW-Dynatrace-config/CD_trip-reminder-processor/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-reminder-processor/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-reminder-processor/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_trip-reminder-processor/dashboard/dashboard.yaml new file mode 100644 index 00000000..1be808ce --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-reminder-processor/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDtrip-reminder-processor-PROD-E2E: defaultPRODE2E.json +- CDtrip-reminder-processor-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDtrip-reminder-processor-PROD-E2E: +- name: CD_trip-reminder-processor PROD +- mzName: CD_trip-reminder-processor/management-zone/CDtrip-reminder-processor.name +- mzId: CD_trip-reminder-processor/management-zone/CDtrip-reminder-processor.id +- skipDeployment: "true" +#Configuration +CDtrip-reminder-processor-PROD-E2E.EMEA-Prod: +- name: CD_trip-reminder-processor PROD +- mzName: CD_trip-reminder-processor/management-zone/CDtrip-reminder-processor.name +- mzId: CD_trip-reminder-processor/management-zone/CDtrip-reminder-processor.id +- tag: trip-reminder-processor +- skipDeployment: "false" +CDtrip-reminder-processor-PROD-E2E.NA-Prod: +- name: CD_trip-reminder-processor PROD +- mzName: CD_trip-reminder-processor/management-zone/CDtrip-reminder-processor.name +- mzId: CD_trip-reminder-processor/management-zone/CDtrip-reminder-processor.id +- tag: trip-reminder-processor +- skipDeployment: "false" +CDtrip-reminder-processor-PROD-E2E.CN-Prod: +- name: CD_trip-reminder-processor PROD +- mzName: CD_trip-reminder-processor/management-zone/CDtrip-reminder-processor.name +- mzId: CD_trip-reminder-processor/management-zone/CDtrip-reminder-processor.id +- tag: trip-reminder-processor +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDtrip-reminder-processor-INT-TEST: +- name: CD_trip-reminder-processor INT-TEST +- mzName: CD_trip-reminder-processor/management-zone/CDtrip-reminder-processor.name +- mzId: CD_trip-reminder-processor/management-zone/CDtrip-reminder-processor.id +- tag: trip-reminder-processor +- skipDeployment: "true" +#Configuration +CDtrip-reminder-processor-INT-TEST.EMEA-PreProd: +- name: CD_trip-reminder-processor INT-TEST +- mzName: CD_trip-reminder-processor/management-zone/CDtrip-reminder-processor.name +- mzId: CD_trip-reminder-processor/management-zone/CDtrip-reminder-processor.id +- tag: trip-reminder-processor +- skipDeployment: "false" +CDtrip-reminder-processor-INT-TEST.NA-PreProd: +- name: CD_trip-reminder-processor INT-TEST +- mzName: CD_trip-reminder-processor/management-zone/CDtrip-reminder-processor.name +- mzId: CD_trip-reminder-processor/management-zone/CDtrip-reminder-processor.id +- env: INT +- skipDeployment: "false" +CDtrip-reminder-processor-INT-TEST.CN-PreProd: +- name: CD_trip-reminder-processor INT-TEST +- mzName: CD_trip-reminder-processor/management-zone/CDtrip-reminder-processor.name +- mzId: CD_trip-reminder-processor/management-zone/CDtrip-reminder-processor.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-reminder-processor/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_trip-reminder-processor/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-reminder-processor/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-reminder-processor/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_trip-reminder-processor/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-reminder-processor/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-reminder-processor/management-zone/README.md b/BMW-Dynatrace-config/CD_trip-reminder-processor/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-reminder-processor/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_trip-reminder-processor/management-zone/default.json b/BMW-Dynatrace-config/CD_trip-reminder-processor/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-reminder-processor/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-reminder-processor/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_trip-reminder-processor/management-zone/management-zone.yaml new file mode 100644 index 00000000..b4dd2c23 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-reminder-processor/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDtrip-reminder-processor: default.json + +CDtrip-reminder-processor: +- name: CD_trip-reminder-processor +- tag: trip-reminder-processor diff --git a/BMW-Dynatrace-config/CD_trip-reminder-processor/notification/README.md b/BMW-Dynatrace-config/CD_trip-reminder-processor/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-reminder-processor/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-reminder-processor/notification/email.json b/BMW-Dynatrace-config/CD_trip-reminder-processor/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-reminder-processor/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-reminder-processor/notification/msTeams.json b/BMW-Dynatrace-config/CD_trip-reminder-processor/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-reminder-processor/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-reminder-processor/notification/notification.yaml b/BMW-Dynatrace-config/CD_trip-reminder-processor/notification/notification.yaml new file mode 100644 index 00000000..d0da9c91 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-reminder-processor/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDtrip-reminder-processor-PROD: msTeams.json +- CDtrip-reminder-processor-E2E: msTeams.json +- CDtrip-reminder-processor-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtrip-reminder-processor-PROD: +- name: CD_trip-reminder-processor PROD +- alertingProfile: CD_trip-reminder-processor/alerting-profile/CDtrip-reminder-processor-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtrip-reminder-processor-PROD.EMEA-Prod: +- name: CD_trip-reminder-processor PROD +- alertingProfile: CD_trip-reminder-processor/alerting-profile/CDtrip-reminder-processor-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDtrip-reminder-processor-PROD.NA-Prod: +- name: CD_trip-reminder-processor PROD +- alertingProfile: CD_trip-reminder-processor/alerting-profile/CDtrip-reminder-processor-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDtrip-reminder-processor-PROD.CN-Prod: +- name: CD_trip-reminder-processor PROD +- alertingProfile: CD_trip-reminder-processor/alerting-profile/CDtrip-reminder-processor-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtrip-reminder-processor-E2E: +- name: CD_trip-reminder-processor E2E +- alertingProfile: CD_trip-reminder-processor/alerting-profile/CDtrip-reminder-processor-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtrip-reminder-processor-E2E.EMEA-Prod: +- name: CD_trip-reminder-processor E2E +- alertingProfile: CD_trip-reminder-processor/alerting-profile/CDtrip-reminder-processor-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDtrip-reminder-processor-E2E.NA-Prod: +- name: CD_trip-reminder-processor E2E +- alertingProfile: CD_trip-reminder-processor/alerting-profile/CDtrip-reminder-processor-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDtrip-reminder-processor-E2E.CN-Prod: +- name: CD_trip-reminder-processor E2E +- alertingProfile: CD_trip-reminder-processor/alerting-profile/CDtrip-reminder-processor-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtrip-reminder-processor-INT: +- name: CD_trip-reminder-processor INT +- alertingProfile: CD_trip-reminder-processor/alerting-profile/CDtrip-reminder-processor-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtrip-reminder-processor-INT.EMEA-PreProd: +- name: CD_trip-reminder-processor INT +- alertingProfile: CD_trip-reminder-processor/alerting-profile/CDtrip-reminder-processor-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDtrip-reminder-processor-INT.NA-PreProd: +- name: CD_trip-reminder-processor INT +- alertingProfile: CD_trip-reminder-processor/alerting-profile/CDtrip-reminder-processor-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDtrip-reminder-processor-INT.CN-PreProd: +- name: CD_trip-reminder-processor INT +- alertingProfile: CD_trip-reminder-processor/alerting-profile/CDtrip-reminder-processor-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-reminder-processor/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_trip-reminder-processor/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-reminder-processor/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-reminder-processor/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_trip-reminder-processor/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-reminder-processor/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-reminder-processor/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_trip-reminder-processor/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..775b0bb3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-reminder-processor/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- trip-reminder-processor: default.json + +trip-reminder-processor: +- name: CD_trip-reminder-processor - +- mzName: CD_trip-reminder-processor/management-zone/CDtrip-reminder-processor.name +- mzId: CD_trip-reminder-processor/management-zone/CDtrip-reminder-processor.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-route-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_trip-route-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..65ad79c0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-route-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDtrip-route-service-PROD: default.json +- CDtrip-route-service-E2E: default.json +- CDtrip-route-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDtrip-route-service-PROD: +- name: CD_trip-route-service PROD +- tag: trip-route-service +- mzId: CD_trip-route-service/management-zone/CDtrip-route-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDtrip-route-service-PROD.EMEA-Prod: +- name: CD_trip-route-service PROD +- tag: trip-route-service +- mzId: CD_trip-route-service/management-zone/CDtrip-route-service.id +- env: PROD +- skipDeployment: "false" +CDtrip-route-service-PROD.NA-Prod: +- name: CD_trip-route-service PROD +- tag: trip-route-service +- mzId: CD_trip-route-service/management-zone/CDtrip-route-service.id +- env: PROD +- skipDeployment: "false" +CDtrip-route-service-PROD.CN-Prod: +- name: CD_trip-route-service PROD +- tag: trip-route-service +- mzId: CD_trip-route-service/management-zone/CDtrip-route-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDtrip-route-service-E2E: +- name: CD_trip-route-service E2E +- tag: trip-route-service +- mzId: CD_trip-route-service/management-zone/CDtrip-route-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDtrip-route-service-E2E.EMEA-Prod: +- name: CD_trip-route-service E2E +- tag: trip-route-service +- mzId: CD_trip-route-service/management-zone/CDtrip-route-service.id +- env: E2E +- skipDeployment: "false" +CDtrip-route-service-E2E.NA-Prod: +- name: CD_trip-route-service E2E +- tag: trip-route-service +- mzId: CD_trip-route-service/management-zone/CDtrip-route-service.id +- env: E2E +- skipDeployment: "false" +CDtrip-route-service-E2E.CN-Prod: +- name: CD_trip-route-service E2E +- tag: trip-route-service +- mzId: CD_trip-route-service/management-zone/CDtrip-route-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDtrip-route-service-INT: +- name: CD_trip-route-service INT +- tag: trip-route-service +- mzId: CD_trip-route-service/management-zone/CDtrip-route-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDtrip-route-service-INT.EMEA-PreProd: +- name: CD_trip-route-service INT +- tag: trip-route-service +- mzId: CD_trip-route-service/management-zone/CDtrip-route-service.id +- env: INT +- skipDeployment: "false" +CDtrip-route-service-INT.NA-PreProd: +- name: CD_trip-route-service INT +- tag: trip-route-service +- mzId: CD_trip-route-service/management-zone/CDtrip-route-service.id +- env: INT +- skipDeployment: "false" +CDtrip-route-service-INT.CN-PreProd: +- name: CD_trip-route-service INT +- tag: trip-route-service +- mzId: CD_trip-route-service/management-zone/CDtrip-route-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-route-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_trip-route-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-route-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-route-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_trip-route-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-route-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-route-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_trip-route-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-route-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-route-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_trip-route-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-route-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-route-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_trip-route-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-route-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-route-service/dashboard/README.md b/BMW-Dynatrace-config/CD_trip-route-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-route-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-route-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_trip-route-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..2cfb85ec --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-route-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDtrip-route-service-PROD-E2E: defaultPRODE2E.json +- CDtrip-route-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDtrip-route-service-PROD-E2E: +- name: CD_trip-route-service PROD +- mzName: CD_trip-route-service/management-zone/CDtrip-route-service.name +- mzId: CD_trip-route-service/management-zone/CDtrip-route-service.id +- skipDeployment: "true" +#Configuration +CDtrip-route-service-PROD-E2E.EMEA-Prod: +- name: CD_trip-route-service PROD +- mzName: CD_trip-route-service/management-zone/CDtrip-route-service.name +- mzId: CD_trip-route-service/management-zone/CDtrip-route-service.id +- tag: trip-route-service +- skipDeployment: "false" +CDtrip-route-service-PROD-E2E.NA-Prod: +- name: CD_trip-route-service PROD +- mzName: CD_trip-route-service/management-zone/CDtrip-route-service.name +- mzId: CD_trip-route-service/management-zone/CDtrip-route-service.id +- tag: trip-route-service +- skipDeployment: "false" +CDtrip-route-service-PROD-E2E.CN-Prod: +- name: CD_trip-route-service PROD +- mzName: CD_trip-route-service/management-zone/CDtrip-route-service.name +- mzId: CD_trip-route-service/management-zone/CDtrip-route-service.id +- tag: trip-route-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDtrip-route-service-INT-TEST: +- name: CD_trip-route-service INT-TEST +- mzName: CD_trip-route-service/management-zone/CDtrip-route-service.name +- mzId: CD_trip-route-service/management-zone/CDtrip-route-service.id +- tag: trip-route-service +- skipDeployment: "true" +#Configuration +CDtrip-route-service-INT-TEST.EMEA-PreProd: +- name: CD_trip-route-service INT-TEST +- mzName: CD_trip-route-service/management-zone/CDtrip-route-service.name +- mzId: CD_trip-route-service/management-zone/CDtrip-route-service.id +- tag: trip-route-service +- skipDeployment: "false" +CDtrip-route-service-INT-TEST.NA-PreProd: +- name: CD_trip-route-service INT-TEST +- mzName: CD_trip-route-service/management-zone/CDtrip-route-service.name +- mzId: CD_trip-route-service/management-zone/CDtrip-route-service.id +- env: INT +- skipDeployment: "false" +CDtrip-route-service-INT-TEST.CN-PreProd: +- name: CD_trip-route-service INT-TEST +- mzName: CD_trip-route-service/management-zone/CDtrip-route-service.name +- mzId: CD_trip-route-service/management-zone/CDtrip-route-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-route-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_trip-route-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-route-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-route-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_trip-route-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-route-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-route-service/management-zone/README.md b/BMW-Dynatrace-config/CD_trip-route-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-route-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_trip-route-service/management-zone/default.json b/BMW-Dynatrace-config/CD_trip-route-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-route-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-route-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_trip-route-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..a58c261f --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-route-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDtrip-route-service: default.json + +CDtrip-route-service: +- name: CD_trip-route-service +- tag: trip-route-service diff --git a/BMW-Dynatrace-config/CD_trip-route-service/notification/README.md b/BMW-Dynatrace-config/CD_trip-route-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-route-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-route-service/notification/email.json b/BMW-Dynatrace-config/CD_trip-route-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-route-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-route-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_trip-route-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-route-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-route-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_trip-route-service/notification/notification.yaml new file mode 100644 index 00000000..601f3ef0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-route-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDtrip-route-service-PROD: msTeams.json +- CDtrip-route-service-E2E: msTeams.json +- CDtrip-route-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtrip-route-service-PROD: +- name: CD_trip-route-service PROD +- alertingProfile: CD_trip-route-service/alerting-profile/CDtrip-route-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtrip-route-service-PROD.EMEA-Prod: +- name: CD_trip-route-service PROD +- alertingProfile: CD_trip-route-service/alerting-profile/CDtrip-route-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDtrip-route-service-PROD.NA-Prod: +- name: CD_trip-route-service PROD +- alertingProfile: CD_trip-route-service/alerting-profile/CDtrip-route-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDtrip-route-service-PROD.CN-Prod: +- name: CD_trip-route-service PROD +- alertingProfile: CD_trip-route-service/alerting-profile/CDtrip-route-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtrip-route-service-E2E: +- name: CD_trip-route-service E2E +- alertingProfile: CD_trip-route-service/alerting-profile/CDtrip-route-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtrip-route-service-E2E.EMEA-Prod: +- name: CD_trip-route-service E2E +- alertingProfile: CD_trip-route-service/alerting-profile/CDtrip-route-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDtrip-route-service-E2E.NA-Prod: +- name: CD_trip-route-service E2E +- alertingProfile: CD_trip-route-service/alerting-profile/CDtrip-route-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDtrip-route-service-E2E.CN-Prod: +- name: CD_trip-route-service E2E +- alertingProfile: CD_trip-route-service/alerting-profile/CDtrip-route-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtrip-route-service-INT: +- name: CD_trip-route-service INT +- alertingProfile: CD_trip-route-service/alerting-profile/CDtrip-route-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtrip-route-service-INT.EMEA-PreProd: +- name: CD_trip-route-service INT +- alertingProfile: CD_trip-route-service/alerting-profile/CDtrip-route-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDtrip-route-service-INT.NA-PreProd: +- name: CD_trip-route-service INT +- alertingProfile: CD_trip-route-service/alerting-profile/CDtrip-route-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDtrip-route-service-INT.CN-PreProd: +- name: CD_trip-route-service INT +- alertingProfile: CD_trip-route-service/alerting-profile/CDtrip-route-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-route-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_trip-route-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-route-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-route-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_trip-route-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-route-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-route-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_trip-route-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..ae2a2a6f --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-route-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- trip-route-service: default.json + +trip-route-service: +- name: CD_trip-route-service - +- mzName: CD_trip-route-service/management-zone/CDtrip-route-service.name +- mzId: CD_trip-route-service/management-zone/CDtrip-route-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_trip-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..8ff107d9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDtrip-service-PROD: default.json +- CDtrip-service-E2E: default.json +- CDtrip-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDtrip-service-PROD: +- name: CD_trip-service PROD +- tag: trip-service +- mzId: CD_trip-service/management-zone/CDtrip-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDtrip-service-PROD.EMEA-Prod: +- name: CD_trip-service PROD +- tag: trip-service +- mzId: CD_trip-service/management-zone/CDtrip-service.id +- env: PROD +- skipDeployment: "false" +CDtrip-service-PROD.NA-Prod: +- name: CD_trip-service PROD +- tag: trip-service +- mzId: CD_trip-service/management-zone/CDtrip-service.id +- env: PROD +- skipDeployment: "false" +CDtrip-service-PROD.CN-Prod: +- name: CD_trip-service PROD +- tag: trip-service +- mzId: CD_trip-service/management-zone/CDtrip-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDtrip-service-E2E: +- name: CD_trip-service E2E +- tag: trip-service +- mzId: CD_trip-service/management-zone/CDtrip-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDtrip-service-E2E.EMEA-Prod: +- name: CD_trip-service E2E +- tag: trip-service +- mzId: CD_trip-service/management-zone/CDtrip-service.id +- env: E2E +- skipDeployment: "false" +CDtrip-service-E2E.NA-Prod: +- name: CD_trip-service E2E +- tag: trip-service +- mzId: CD_trip-service/management-zone/CDtrip-service.id +- env: E2E +- skipDeployment: "false" +CDtrip-service-E2E.CN-Prod: +- name: CD_trip-service E2E +- tag: trip-service +- mzId: CD_trip-service/management-zone/CDtrip-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDtrip-service-INT: +- name: CD_trip-service INT +- tag: trip-service +- mzId: CD_trip-service/management-zone/CDtrip-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDtrip-service-INT.EMEA-PreProd: +- name: CD_trip-service INT +- tag: trip-service +- mzId: CD_trip-service/management-zone/CDtrip-service.id +- env: INT +- skipDeployment: "false" +CDtrip-service-INT.NA-PreProd: +- name: CD_trip-service INT +- tag: trip-service +- mzId: CD_trip-service/management-zone/CDtrip-service.id +- env: INT +- skipDeployment: "false" +CDtrip-service-INT.CN-PreProd: +- name: CD_trip-service INT +- tag: trip-service +- mzId: CD_trip-service/management-zone/CDtrip-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_trip-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_trip-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_trip-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_trip-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_trip-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-service/dashboard/README.md b/BMW-Dynatrace-config/CD_trip-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_trip-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..44bbf586 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDtrip-service-PROD-E2E: defaultPRODE2E.json +- CDtrip-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDtrip-service-PROD-E2E: +- name: CD_trip-service PROD +- mzName: CD_trip-service/management-zone/CDtrip-service.name +- mzId: CD_trip-service/management-zone/CDtrip-service.id +- skipDeployment: "true" +#Configuration +CDtrip-service-PROD-E2E.EMEA-Prod: +- name: CD_trip-service PROD +- mzName: CD_trip-service/management-zone/CDtrip-service.name +- mzId: CD_trip-service/management-zone/CDtrip-service.id +- tag: trip-service +- skipDeployment: "false" +CDtrip-service-PROD-E2E.NA-Prod: +- name: CD_trip-service PROD +- mzName: CD_trip-service/management-zone/CDtrip-service.name +- mzId: CD_trip-service/management-zone/CDtrip-service.id +- tag: trip-service +- skipDeployment: "false" +CDtrip-service-PROD-E2E.CN-Prod: +- name: CD_trip-service PROD +- mzName: CD_trip-service/management-zone/CDtrip-service.name +- mzId: CD_trip-service/management-zone/CDtrip-service.id +- tag: trip-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDtrip-service-INT-TEST: +- name: CD_trip-service INT-TEST +- mzName: CD_trip-service/management-zone/CDtrip-service.name +- mzId: CD_trip-service/management-zone/CDtrip-service.id +- tag: trip-service +- skipDeployment: "true" +#Configuration +CDtrip-service-INT-TEST.EMEA-PreProd: +- name: CD_trip-service INT-TEST +- mzName: CD_trip-service/management-zone/CDtrip-service.name +- mzId: CD_trip-service/management-zone/CDtrip-service.id +- tag: trip-service +- skipDeployment: "false" +CDtrip-service-INT-TEST.NA-PreProd: +- name: CD_trip-service INT-TEST +- mzName: CD_trip-service/management-zone/CDtrip-service.name +- mzId: CD_trip-service/management-zone/CDtrip-service.id +- env: INT +- skipDeployment: "false" +CDtrip-service-INT-TEST.CN-PreProd: +- name: CD_trip-service INT-TEST +- mzName: CD_trip-service/management-zone/CDtrip-service.name +- mzId: CD_trip-service/management-zone/CDtrip-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_trip-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_trip-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-service/management-zone/README.md b/BMW-Dynatrace-config/CD_trip-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_trip-service/management-zone/default.json b/BMW-Dynatrace-config/CD_trip-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_trip-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..4c8d537f --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDtrip-service: default.json + +CDtrip-service: +- name: CD_trip-service +- tag: trip-service diff --git a/BMW-Dynatrace-config/CD_trip-service/notification/README.md b/BMW-Dynatrace-config/CD_trip-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-service/notification/email.json b/BMW-Dynatrace-config/CD_trip-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_trip-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_trip-service/notification/notification.yaml new file mode 100644 index 00000000..313f679e --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDtrip-service-PROD: msTeams.json +- CDtrip-service-E2E: msTeams.json +- CDtrip-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtrip-service-PROD: +- name: CD_trip-service PROD +- alertingProfile: CD_trip-service/alerting-profile/CDtrip-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtrip-service-PROD.EMEA-Prod: +- name: CD_trip-service PROD +- alertingProfile: CD_trip-service/alerting-profile/CDtrip-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDtrip-service-PROD.NA-Prod: +- name: CD_trip-service PROD +- alertingProfile: CD_trip-service/alerting-profile/CDtrip-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDtrip-service-PROD.CN-Prod: +- name: CD_trip-service PROD +- alertingProfile: CD_trip-service/alerting-profile/CDtrip-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtrip-service-E2E: +- name: CD_trip-service E2E +- alertingProfile: CD_trip-service/alerting-profile/CDtrip-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtrip-service-E2E.EMEA-Prod: +- name: CD_trip-service E2E +- alertingProfile: CD_trip-service/alerting-profile/CDtrip-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDtrip-service-E2E.NA-Prod: +- name: CD_trip-service E2E +- alertingProfile: CD_trip-service/alerting-profile/CDtrip-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDtrip-service-E2E.CN-Prod: +- name: CD_trip-service E2E +- alertingProfile: CD_trip-service/alerting-profile/CDtrip-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtrip-service-INT: +- name: CD_trip-service INT +- alertingProfile: CD_trip-service/alerting-profile/CDtrip-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtrip-service-INT.EMEA-PreProd: +- name: CD_trip-service INT +- alertingProfile: CD_trip-service/alerting-profile/CDtrip-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDtrip-service-INT.NA-PreProd: +- name: CD_trip-service INT +- alertingProfile: CD_trip-service/alerting-profile/CDtrip-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDtrip-service-INT.CN-PreProd: +- name: CD_trip-service INT +- alertingProfile: CD_trip-service/alerting-profile/CDtrip-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_trip-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_trip-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_trip-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..bbe425e2 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- trip-service: default.json + +trip-service: +- name: CD_trip-service - +- mzName: CD_trip-service/management-zone/CDtrip-service.name +- mzId: CD_trip-service/management-zone/CDtrip-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bcallservice/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_ts-bcallservice/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..5df247df --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bcallservice/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDts-bcallservice-PROD: default.json +- CDts-bcallservice-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-bcallservice-PROD: +- name: CD_ts-bcallservice PROD +- tag: ts-bcallservice +- mzId: CD_ts-bcallservice/management-zone/CDts-bcallservice.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDts-bcallservice-PROD.EMEA-Prod: +- name: CD_ts-bcallservice PROD +- tag: ts-bcallservice +- mzId: CD_ts-bcallservice/management-zone/CDts-bcallservice.id +- env: PROD +- skipDeployment: "false" +CDts-bcallservice-PROD.NA-Prod: +- name: CD_ts-bcallservice PROD +- tag: ts-bcallservice +- mzId: CD_ts-bcallservice/management-zone/CDts-bcallservice.id +- env: PROD +- skipDeployment: "false" +CDts-bcallservice-PROD.CN-Prod: +- name: CD_ts-bcallservice PROD +- tag: ts-bcallservice +- mzId: CD_ts-bcallservice/management-zone/CDts-bcallservice.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-bcallservice-INT: +- name: CD_ts-bcallservice INT +- tag: ts-bcallservice +- mzId: CD_ts-bcallservice/management-zone/CDts-bcallservice.id +- env: INT +- skipDeployment: "true" +#Configuration +CDts-bcallservice-INT.EMEA-PreProd: +- name: CD_ts-bcallservice INT +- tag: ts-bcallservice +- mzId: CD_ts-bcallservice/management-zone/CDts-bcallservice.id +- env: INT +- skipDeployment: "false" +CDts-bcallservice-INT.NA-PreProd: +- name: CD_ts-bcallservice INT +- tag: ts-bcallservice +- mzId: CD_ts-bcallservice/management-zone/CDts-bcallservice.id +- env: INT +- skipDeployment: "false" +CDts-bcallservice-INT.CN-PreProd: +- name: CD_ts-bcallservice INT +- tag: ts-bcallservice +- mzId: CD_ts-bcallservice/management-zone/CDts-bcallservice.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bcallservice/alerting-profile/default.json b/BMW-Dynatrace-config/CD_ts-bcallservice/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bcallservice/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bcallservice/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_ts-bcallservice/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bcallservice/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bcallservice/custom-service-java/README.md b/BMW-Dynatrace-config/CD_ts-bcallservice/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bcallservice/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bcallservice/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_ts-bcallservice/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bcallservice/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bcallservice/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_ts-bcallservice/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bcallservice/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bcallservice/dashboard/README.md b/BMW-Dynatrace-config/CD_ts-bcallservice/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bcallservice/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bcallservice/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_ts-bcallservice/dashboard/dashboard.yaml new file mode 100644 index 00000000..b297b6b2 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bcallservice/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDts-bcallservice-PROD-E2E: defaultPRODE2E.json +- CDts-bcallservice-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDts-bcallservice-PROD-E2E: +- name: CD_ts-bcallservice PROD-E2E +- mzName: CD_ts-bcallservice/management-zone/CDts-bcallservice.name +- mzId: CD_ts-bcallservice/management-zone/CDts-bcallservice.id +- skipDeployment: "true" +#Configuration +CDts-bcallservice-PROD-E2E.EMEA-Prod: +- name: CD_ts-bcallservice PROD-E2E +- mzName: CD_ts-bcallservice/management-zone/CDts-bcallservice.name +- mzId: CD_ts-bcallservice/management-zone/CDts-bcallservice.id +- tag: ts-bcallservice +- skipDeployment: "false" +CDts-bcallservice-PROD-E2E.NA-Prod: +- name: CD_ts-bcallservice PROD-E2E +- mzName: CD_ts-bcallservice/management-zone/CDts-bcallservice.name +- mzId: CD_ts-bcallservice/management-zone/CDts-bcallservice.id +- tag: ts-bcallservice +- skipDeployment: "false" +CDts-bcallservice-PROD-E2E.CN-Prod: +- name: CD_ts-bcallservice PROD-E2E +- mzName: CD_ts-bcallservice/management-zone/CDts-bcallservice.name +- mzId: CD_ts-bcallservice/management-zone/CDts-bcallservice.id +- tag: ts-bcallservice +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDts-bcallservice-INT-TEST: +- name: CD_ts-bcallservice INT-TEST +- mzName: CD_ts-bcallservice/management-zone/CDts-bcallservice.name +- mzId: CD_ts-bcallservice/management-zone/CDts-bcallservice.id +- tag: ts-bcallservice +- skipDeployment: "true" +#Configuration +CDts-bcallservice-INT-TEST.EMEA-PreProd: +- name: CD_ts-bcallservice INT-TEST +- mzName: CD_ts-bcallservice/management-zone/CDts-bcallservice.name +- mzId: CD_ts-bcallservice/management-zone/CDts-bcallservice.id +- tag: ts-bcallservice +- skipDeployment: "false" +CDts-bcallservice-INT-TEST.NA-PreProd: +- name: CD_ts-bcallservice INT-TEST +- mzName: CD_ts-bcallservice/management-zone/CDts-bcallservice.name +- mzId: CD_ts-bcallservice/management-zone/CDts-bcallservice.id +- env: INT +- skipDeployment: "false" +CDts-bcallservice-INT-TEST.CN-PreProd: +- name: CD_ts-bcallservice INT-TEST +- mzName: CD_ts-bcallservice/management-zone/CDts-bcallservice.name +- mzId: CD_ts-bcallservice/management-zone/CDts-bcallservice.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bcallservice/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_ts-bcallservice/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bcallservice/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bcallservice/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_ts-bcallservice/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bcallservice/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bcallservice/management-zone/README.md b/BMW-Dynatrace-config/CD_ts-bcallservice/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bcallservice/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_ts-bcallservice/management-zone/default.json b/BMW-Dynatrace-config/CD_ts-bcallservice/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bcallservice/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bcallservice/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_ts-bcallservice/management-zone/management-zone.yaml new file mode 100644 index 00000000..67efd35c --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bcallservice/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDts-bcallservice: default.json + +CDts-bcallservice: +- name: CD_ts-bcallservice +- tag: ts-bcallservice diff --git a/BMW-Dynatrace-config/CD_ts-bcallservice/notification/README.md b/BMW-Dynatrace-config/CD_ts-bcallservice/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bcallservice/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bcallservice/notification/email.json b/BMW-Dynatrace-config/CD_ts-bcallservice/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bcallservice/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bcallservice/notification/msTeams.json b/BMW-Dynatrace-config/CD_ts-bcallservice/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bcallservice/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bcallservice/notification/notification.yaml b/BMW-Dynatrace-config/CD_ts-bcallservice/notification/notification.yaml new file mode 100644 index 00000000..d9830f24 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bcallservice/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDts-bcallservice-PROD: msTeams.json +- CDts-bcallservice-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-bcallservice-PROD: +- name: CD_ts-bcallservice PROD +- alertingProfile: CD_ts-bcallservice/alerting-profile/CDts-bcallservice-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-bcallservice-PROD.EMEA-Prod: +- name: CD_ts-bcallservice PROD +- alertingProfile: CD_ts-bcallservice/alerting-profile/CDts-bcallservice-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-bcallservice-PROD.NA-Prod: +- name: CD_ts-bcallservice PROD +- alertingProfile: CD_ts-bcallservice/alerting-profile/CDts-bcallservice-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-bcallservice-PROD.CN-Prod: +- name: CD_ts-bcallservice PROD +- alertingProfile: CD_ts-bcallservice/alerting-profile/CDts-bcallservice-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-bcallservice-INT: +- name: CD_ts-bcallservice INT +- alertingProfile: CD_ts-bcallservice/alerting-profile/CDts-bcallservice-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-bcallservice-INT.EMEA-PreProd: +- name: CD_ts-bcallservice INT +- alertingProfile: CD_ts-bcallservice/alerting-profile/CDts-bcallservice-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-bcallservice-INT.NA-PreProd: +- name: CD_ts-bcallservice INT +- alertingProfile: CD_ts-bcallservice/alerting-profile/CDts-bcallservice-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-bcallservice-INT.CN-PreProd: +- name: CD_ts-bcallservice INT +- alertingProfile: CD_ts-bcallservice/alerting-profile/CDts-bcallservice-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bcallservice/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_ts-bcallservice/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bcallservice/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bcallservice/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_ts-bcallservice/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bcallservice/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bcallservice/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_ts-bcallservice/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..c0298812 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bcallservice/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- ts-bcallservice: default.json + +ts-bcallservice: +- name: CD_ts-bcallservice - +- mzName: CD_ts-bcallservice/management-zone/CDts-bcallservice.name +- mzId: CD_ts-bcallservice/management-zone/CDts-bcallservice.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bt/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_ts-bt/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..af1bd0e0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bt/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDts-bt-PROD: default.json +- CDts-bt-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-bt-PROD: +- name: CD_ts-bt PROD +- tag: ts-bt +- mzId: CD_ts-bt/management-zone/CDts-bt.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDts-bt-PROD.EMEA-Prod: +- name: CD_ts-bt PROD +- tag: ts-bt +- mzId: CD_ts-bt/management-zone/CDts-bt.id +- env: PROD +- skipDeployment: "false" +CDts-bt-PROD.NA-Prod: +- name: CD_ts-bt PROD +- tag: ts-bt +- mzId: CD_ts-bt/management-zone/CDts-bt.id +- env: PROD +- skipDeployment: "false" +CDts-bt-PROD.CN-Prod: +- name: CD_ts-bt PROD +- tag: ts-bt +- mzId: CD_ts-bt/management-zone/CDts-bt.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-bt-INT: +- name: CD_ts-bt INT +- tag: ts-bt +- mzId: CD_ts-bt/management-zone/CDts-bt.id +- env: INT +- skipDeployment: "true" +#Configuration +CDts-bt-INT.EMEA-PreProd: +- name: CD_ts-bt INT +- tag: ts-bt +- mzId: CD_ts-bt/management-zone/CDts-bt.id +- env: INT +- skipDeployment: "false" +CDts-bt-INT.NA-PreProd: +- name: CD_ts-bt INT +- tag: ts-bt +- mzId: CD_ts-bt/management-zone/CDts-bt.id +- env: INT +- skipDeployment: "false" +CDts-bt-INT.CN-PreProd: +- name: CD_ts-bt INT +- tag: ts-bt +- mzId: CD_ts-bt/management-zone/CDts-bt.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bt/alerting-profile/default.json b/BMW-Dynatrace-config/CD_ts-bt/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bt/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bt/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_ts-bt/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bt/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bt/custom-service-java/README.md b/BMW-Dynatrace-config/CD_ts-bt/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bt/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bt/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_ts-bt/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bt/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bt/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_ts-bt/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bt/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bt/dashboard/README.md b/BMW-Dynatrace-config/CD_ts-bt/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bt/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bt/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_ts-bt/dashboard/dashboard.yaml new file mode 100644 index 00000000..639cadc7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bt/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDts-bt-PROD-E2E: defaultPRODE2E.json +- CDts-bt-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDts-bt-PROD-E2E: +- name: CD_ts-bt PROD-E2E +- mzName: CD_ts-bt/management-zone/CDts-bt.name +- mzId: CD_ts-bt/management-zone/CDts-bt.id +- skipDeployment: "true" +#Configuration +CDts-bt-PROD-E2E.EMEA-Prod: +- name: CD_ts-bt PROD-E2E +- mzName: CD_ts-bt/management-zone/CDts-bt.name +- mzId: CD_ts-bt/management-zone/CDts-bt.id +- tag: ts-bt +- skipDeployment: "false" +CDts-bt-PROD-E2E.NA-Prod: +- name: CD_ts-bt PROD-E2E +- mzName: CD_ts-bt/management-zone/CDts-bt.name +- mzId: CD_ts-bt/management-zone/CDts-bt.id +- tag: ts-bt +- skipDeployment: "false" +CDts-bt-PROD-E2E.CN-Prod: +- name: CD_ts-bt PROD-E2E +- mzName: CD_ts-bt/management-zone/CDts-bt.name +- mzId: CD_ts-bt/management-zone/CDts-bt.id +- tag: ts-bt +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDts-bt-INT-TEST: +- name: CD_ts-bt INT-TEST +- mzName: CD_ts-bt/management-zone/CDts-bt.name +- mzId: CD_ts-bt/management-zone/CDts-bt.id +- tag: ts-bt +- skipDeployment: "true" +#Configuration +CDts-bt-INT-TEST.EMEA-PreProd: +- name: CD_ts-bt INT-TEST +- mzName: CD_ts-bt/management-zone/CDts-bt.name +- mzId: CD_ts-bt/management-zone/CDts-bt.id +- tag: ts-bt +- skipDeployment: "false" +CDts-bt-INT-TEST.NA-PreProd: +- name: CD_ts-bt INT-TEST +- mzName: CD_ts-bt/management-zone/CDts-bt.name +- mzId: CD_ts-bt/management-zone/CDts-bt.id +- env: INT +- skipDeployment: "false" +CDts-bt-INT-TEST.CN-PreProd: +- name: CD_ts-bt INT-TEST +- mzName: CD_ts-bt/management-zone/CDts-bt.name +- mzId: CD_ts-bt/management-zone/CDts-bt.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bt/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_ts-bt/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bt/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bt/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_ts-bt/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bt/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bt/management-zone/README.md b/BMW-Dynatrace-config/CD_ts-bt/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bt/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_ts-bt/management-zone/default.json b/BMW-Dynatrace-config/CD_ts-bt/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bt/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bt/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_ts-bt/management-zone/management-zone.yaml new file mode 100644 index 00000000..8b44874e --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bt/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDts-bt: default.json + +CDts-bt: +- name: CD_ts-bt +- tag: ts-bt diff --git a/BMW-Dynatrace-config/CD_ts-bt/notification/README.md b/BMW-Dynatrace-config/CD_ts-bt/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bt/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bt/notification/email.json b/BMW-Dynatrace-config/CD_ts-bt/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bt/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bt/notification/msTeams.json b/BMW-Dynatrace-config/CD_ts-bt/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bt/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bt/notification/notification.yaml b/BMW-Dynatrace-config/CD_ts-bt/notification/notification.yaml new file mode 100644 index 00000000..ccbc8324 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bt/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDts-bt-PROD: msTeams.json +- CDts-bt-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-bt-PROD: +- name: CD_ts-bt PROD +- alertingProfile: CD_ts-bt/alerting-profile/CDts-bt-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-bt-PROD.EMEA-Prod: +- name: CD_ts-bt PROD +- alertingProfile: CD_ts-bt/alerting-profile/CDts-bt-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-bt-PROD.NA-Prod: +- name: CD_ts-bt PROD +- alertingProfile: CD_ts-bt/alerting-profile/CDts-bt-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-bt-PROD.CN-Prod: +- name: CD_ts-bt PROD +- alertingProfile: CD_ts-bt/alerting-profile/CDts-bt-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-bt-INT: +- name: CD_ts-bt INT +- alertingProfile: CD_ts-bt/alerting-profile/CDts-bt-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-bt-INT.EMEA-PreProd: +- name: CD_ts-bt INT +- alertingProfile: CD_ts-bt/alerting-profile/CDts-bt-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-bt-INT.NA-PreProd: +- name: CD_ts-bt INT +- alertingProfile: CD_ts-bt/alerting-profile/CDts-bt-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-bt-INT.CN-PreProd: +- name: CD_ts-bt INT +- alertingProfile: CD_ts-bt/alerting-profile/CDts-bt-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bt/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_ts-bt/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bt/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bt/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_ts-bt/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bt/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bt/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_ts-bt/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..53209171 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bt/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- ts-bt: default.json + +ts-bt: +- name: CD_ts-bt - +- mzName: CD_ts-bt/management-zone/CDts-bt.name +- mzId: CD_ts-bt/management-zone/CDts-bt.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bti/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_ts-bti/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..09e1d68e --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bti/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDts-bti-PROD: default.json +- CDts-bti-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-bti-PROD: +- name: CD_ts-bti PROD +- tag: ts-bti +- mzId: CD_ts-bti/management-zone/CDts-bti.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDts-bti-PROD.EMEA-Prod: +- name: CD_ts-bti PROD +- tag: ts-bti +- mzId: CD_ts-bti/management-zone/CDts-bti.id +- env: PROD +- skipDeployment: "false" +CDts-bti-PROD.NA-Prod: +- name: CD_ts-bti PROD +- tag: ts-bti +- mzId: CD_ts-bti/management-zone/CDts-bti.id +- env: PROD +- skipDeployment: "false" +CDts-bti-PROD.CN-Prod: +- name: CD_ts-bti PROD +- tag: ts-bti +- mzId: CD_ts-bti/management-zone/CDts-bti.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-bti-INT: +- name: CD_ts-bti INT +- tag: ts-bti +- mzId: CD_ts-bti/management-zone/CDts-bti.id +- env: INT +- skipDeployment: "true" +#Configuration +CDts-bti-INT.EMEA-PreProd: +- name: CD_ts-bti INT +- tag: ts-bti +- mzId: CD_ts-bti/management-zone/CDts-bti.id +- env: INT +- skipDeployment: "false" +CDts-bti-INT.NA-PreProd: +- name: CD_ts-bti INT +- tag: ts-bti +- mzId: CD_ts-bti/management-zone/CDts-bti.id +- env: INT +- skipDeployment: "false" +CDts-bti-INT.CN-PreProd: +- name: CD_ts-bti INT +- tag: ts-bti +- mzId: CD_ts-bti/management-zone/CDts-bti.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bti/alerting-profile/default.json b/BMW-Dynatrace-config/CD_ts-bti/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bti/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bti/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_ts-bti/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bti/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bti/custom-service-java/README.md b/BMW-Dynatrace-config/CD_ts-bti/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bti/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bti/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_ts-bti/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bti/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bti/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_ts-bti/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bti/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bti/dashboard/README.md b/BMW-Dynatrace-config/CD_ts-bti/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bti/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bti/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_ts-bti/dashboard/dashboard.yaml new file mode 100644 index 00000000..e0f67ac4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bti/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDts-bti-PROD-E2E: defaultPRODE2E.json +- CDts-bti-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDts-bti-PROD-E2E: +- name: CD_ts-bti PROD-E2E +- mzName: CD_ts-bti/management-zone/CDts-bti.name +- mzId: CD_ts-bti/management-zone/CDts-bti.id +- skipDeployment: "true" +#Configuration +CDts-bti-PROD-E2E.EMEA-Prod: +- name: CD_ts-bti PROD-E2E +- mzName: CD_ts-bti/management-zone/CDts-bti.name +- mzId: CD_ts-bti/management-zone/CDts-bti.id +- tag: ts-bti +- skipDeployment: "false" +CDts-bti-PROD-E2E.NA-Prod: +- name: CD_ts-bti PROD-E2E +- mzName: CD_ts-bti/management-zone/CDts-bti.name +- mzId: CD_ts-bti/management-zone/CDts-bti.id +- tag: ts-bti +- skipDeployment: "false" +CDts-bti-PROD-E2E.CN-Prod: +- name: CD_ts-bti PROD-E2E +- mzName: CD_ts-bti/management-zone/CDts-bti.name +- mzId: CD_ts-bti/management-zone/CDts-bti.id +- tag: ts-bti +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDts-bti-INT-TEST: +- name: CD_ts-bti INT-TEST +- mzName: CD_ts-bti/management-zone/CDts-bti.name +- mzId: CD_ts-bti/management-zone/CDts-bti.id +- tag: ts-bti +- skipDeployment: "true" +#Configuration +CDts-bti-INT-TEST.EMEA-PreProd: +- name: CD_ts-bti INT-TEST +- mzName: CD_ts-bti/management-zone/CDts-bti.name +- mzId: CD_ts-bti/management-zone/CDts-bti.id +- tag: ts-bti +- skipDeployment: "false" +CDts-bti-INT-TEST.NA-PreProd: +- name: CD_ts-bti INT-TEST +- mzName: CD_ts-bti/management-zone/CDts-bti.name +- mzId: CD_ts-bti/management-zone/CDts-bti.id +- env: INT +- skipDeployment: "false" +CDts-bti-INT-TEST.CN-PreProd: +- name: CD_ts-bti INT-TEST +- mzName: CD_ts-bti/management-zone/CDts-bti.name +- mzId: CD_ts-bti/management-zone/CDts-bti.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bti/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_ts-bti/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bti/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bti/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_ts-bti/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bti/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bti/management-zone/README.md b/BMW-Dynatrace-config/CD_ts-bti/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bti/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_ts-bti/management-zone/default.json b/BMW-Dynatrace-config/CD_ts-bti/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bti/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bti/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_ts-bti/management-zone/management-zone.yaml new file mode 100644 index 00000000..88cd17de --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bti/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDts-bti: default.json + +CDts-bti: +- name: CD_ts-bti +- tag: ts-bti diff --git a/BMW-Dynatrace-config/CD_ts-bti/notification/README.md b/BMW-Dynatrace-config/CD_ts-bti/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bti/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bti/notification/email.json b/BMW-Dynatrace-config/CD_ts-bti/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bti/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bti/notification/msTeams.json b/BMW-Dynatrace-config/CD_ts-bti/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bti/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bti/notification/notification.yaml b/BMW-Dynatrace-config/CD_ts-bti/notification/notification.yaml new file mode 100644 index 00000000..8c4a45c2 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bti/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDts-bti-PROD: msTeams.json +- CDts-bti-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-bti-PROD: +- name: CD_ts-bti PROD +- alertingProfile: CD_ts-bti/alerting-profile/CDts-bti-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-bti-PROD.EMEA-Prod: +- name: CD_ts-bti PROD +- alertingProfile: CD_ts-bti/alerting-profile/CDts-bti-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-bti-PROD.NA-Prod: +- name: CD_ts-bti PROD +- alertingProfile: CD_ts-bti/alerting-profile/CDts-bti-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-bti-PROD.CN-Prod: +- name: CD_ts-bti PROD +- alertingProfile: CD_ts-bti/alerting-profile/CDts-bti-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-bti-INT: +- name: CD_ts-bti INT +- alertingProfile: CD_ts-bti/alerting-profile/CDts-bti-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-bti-INT.EMEA-PreProd: +- name: CD_ts-bti INT +- alertingProfile: CD_ts-bti/alerting-profile/CDts-bti-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-bti-INT.NA-PreProd: +- name: CD_ts-bti INT +- alertingProfile: CD_ts-bti/alerting-profile/CDts-bti-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-bti-INT.CN-PreProd: +- name: CD_ts-bti INT +- alertingProfile: CD_ts-bti/alerting-profile/CDts-bti-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bti/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_ts-bti/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bti/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bti/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_ts-bti/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bti/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bti/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_ts-bti/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..f0c25fea --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bti/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- ts-bti: default.json + +ts-bti: +- name: CD_ts-bti - +- mzName: CD_ts-bti/management-zone/CDts-bti.name +- mzId: CD_ts-bti/management-zone/CDts-bti.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-spm/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_ts-cas-spm/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..5b9fa75d --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-spm/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDts-cas-spm-PROD: default.json +- CDts-cas-spm-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-cas-spm-PROD: +- name: CD_ts-cas-spm PROD +- tag: ts-cas-spm +- mzId: CD_ts-cas-spm/management-zone/CDts-cas-spm.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDts-cas-spm-PROD.EMEA-Prod: +- name: CD_ts-cas-spm PROD +- tag: ts-cas-spm +- mzId: CD_ts-cas-spm/management-zone/CDts-cas-spm.id +- env: PROD +- skipDeployment: "false" +CDts-cas-spm-PROD.NA-Prod: +- name: CD_ts-cas-spm PROD +- tag: ts-cas-spm +- mzId: CD_ts-cas-spm/management-zone/CDts-cas-spm.id +- env: PROD +- skipDeployment: "false" +CDts-cas-spm-PROD.CN-Prod: +- name: CD_ts-cas-spm PROD +- tag: ts-cas-spm +- mzId: CD_ts-cas-spm/management-zone/CDts-cas-spm.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-cas-spm-INT: +- name: CD_ts-cas-spm INT +- tag: ts-cas-spm +- mzId: CD_ts-cas-spm/management-zone/CDts-cas-spm.id +- env: INT +- skipDeployment: "true" +#Configuration +CDts-cas-spm-INT.EMEA-PreProd: +- name: CD_ts-cas-spm INT +- tag: ts-cas-spm +- mzId: CD_ts-cas-spm/management-zone/CDts-cas-spm.id +- env: INT +- skipDeployment: "false" +CDts-cas-spm-INT.NA-PreProd: +- name: CD_ts-cas-spm INT +- tag: ts-cas-spm +- mzId: CD_ts-cas-spm/management-zone/CDts-cas-spm.id +- env: INT +- skipDeployment: "false" +CDts-cas-spm-INT.CN-PreProd: +- name: CD_ts-cas-spm INT +- tag: ts-cas-spm +- mzId: CD_ts-cas-spm/management-zone/CDts-cas-spm.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-spm/alerting-profile/default.json b/BMW-Dynatrace-config/CD_ts-cas-spm/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-spm/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-spm/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_ts-cas-spm/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-spm/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-spm/custom-service-java/README.md b/BMW-Dynatrace-config/CD_ts-cas-spm/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-spm/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-spm/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_ts-cas-spm/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-spm/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-spm/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_ts-cas-spm/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-spm/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-spm/dashboard/README.md b/BMW-Dynatrace-config/CD_ts-cas-spm/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-spm/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-spm/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_ts-cas-spm/dashboard/dashboard.yaml new file mode 100644 index 00000000..f7a8f8ef --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-spm/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDts-cas-spm-PROD-E2E: defaultPRODE2E.json +- CDts-cas-spm-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDts-cas-spm-PROD-E2E: +- name: CD_ts-cas-spm PROD-E2E +- mzName: CD_ts-cas-spm/management-zone/CDts-cas-spm.name +- mzId: CD_ts-cas-spm/management-zone/CDts-cas-spm.id +- skipDeployment: "true" +#Configuration +CDts-cas-spm-PROD-E2E.EMEA-Prod: +- name: CD_ts-cas-spm PROD-E2E +- mzName: CD_ts-cas-spm/management-zone/CDts-cas-spm.name +- mzId: CD_ts-cas-spm/management-zone/CDts-cas-spm.id +- tag: ts-cas-spm +- skipDeployment: "false" +CDts-cas-spm-PROD-E2E.NA-Prod: +- name: CD_ts-cas-spm PROD-E2E +- mzName: CD_ts-cas-spm/management-zone/CDts-cas-spm.name +- mzId: CD_ts-cas-spm/management-zone/CDts-cas-spm.id +- tag: ts-cas-spm +- skipDeployment: "false" +CDts-cas-spm-PROD-E2E.CN-Prod: +- name: CD_ts-cas-spm PROD-E2E +- mzName: CD_ts-cas-spm/management-zone/CDts-cas-spm.name +- mzId: CD_ts-cas-spm/management-zone/CDts-cas-spm.id +- tag: ts-cas-spm +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDts-cas-spm-INT-TEST: +- name: CD_ts-cas-spm INT-TEST +- mzName: CD_ts-cas-spm/management-zone/CDts-cas-spm.name +- mzId: CD_ts-cas-spm/management-zone/CDts-cas-spm.id +- tag: ts-cas-spm +- skipDeployment: "true" +#Configuration +CDts-cas-spm-INT-TEST.EMEA-PreProd: +- name: CD_ts-cas-spm INT-TEST +- mzName: CD_ts-cas-spm/management-zone/CDts-cas-spm.name +- mzId: CD_ts-cas-spm/management-zone/CDts-cas-spm.id +- tag: ts-cas-spm +- skipDeployment: "false" +CDts-cas-spm-INT-TEST.NA-PreProd: +- name: CD_ts-cas-spm INT-TEST +- mzName: CD_ts-cas-spm/management-zone/CDts-cas-spm.name +- mzId: CD_ts-cas-spm/management-zone/CDts-cas-spm.id +- env: INT +- skipDeployment: "false" +CDts-cas-spm-INT-TEST.CN-PreProd: +- name: CD_ts-cas-spm INT-TEST +- mzName: CD_ts-cas-spm/management-zone/CDts-cas-spm.name +- mzId: CD_ts-cas-spm/management-zone/CDts-cas-spm.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-spm/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_ts-cas-spm/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-spm/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-spm/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_ts-cas-spm/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-spm/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-spm/management-zone/README.md b/BMW-Dynatrace-config/CD_ts-cas-spm/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-spm/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_ts-cas-spm/management-zone/default.json b/BMW-Dynatrace-config/CD_ts-cas-spm/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-spm/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-spm/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_ts-cas-spm/management-zone/management-zone.yaml new file mode 100644 index 00000000..f15b98da --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-spm/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDts-cas-spm: default.json + +CDts-cas-spm: +- name: CD_ts-cas-spm +- tag: ts-cas-spm diff --git a/BMW-Dynatrace-config/CD_ts-cas-spm/notification/README.md b/BMW-Dynatrace-config/CD_ts-cas-spm/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-spm/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-spm/notification/email.json b/BMW-Dynatrace-config/CD_ts-cas-spm/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-spm/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-spm/notification/msTeams.json b/BMW-Dynatrace-config/CD_ts-cas-spm/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-spm/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-spm/notification/notification.yaml b/BMW-Dynatrace-config/CD_ts-cas-spm/notification/notification.yaml new file mode 100644 index 00000000..68acbce5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-spm/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDts-cas-spm-PROD: msTeams.json +- CDts-cas-spm-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-cas-spm-PROD: +- name: CD_ts-cas-spm PROD +- alertingProfile: CD_ts-cas-spm/alerting-profile/CDts-cas-spm-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-cas-spm-PROD.EMEA-Prod: +- name: CD_ts-cas-spm PROD +- alertingProfile: CD_ts-cas-spm/alerting-profile/CDts-cas-spm-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-cas-spm-PROD.NA-Prod: +- name: CD_ts-cas-spm PROD +- alertingProfile: CD_ts-cas-spm/alerting-profile/CDts-cas-spm-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-cas-spm-PROD.CN-Prod: +- name: CD_ts-cas-spm PROD +- alertingProfile: CD_ts-cas-spm/alerting-profile/CDts-cas-spm-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-cas-spm-INT: +- name: CD_ts-cas-spm INT +- alertingProfile: CD_ts-cas-spm/alerting-profile/CDts-cas-spm-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-cas-spm-INT.EMEA-PreProd: +- name: CD_ts-cas-spm INT +- alertingProfile: CD_ts-cas-spm/alerting-profile/CDts-cas-spm-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-cas-spm-INT.NA-PreProd: +- name: CD_ts-cas-spm INT +- alertingProfile: CD_ts-cas-spm/alerting-profile/CDts-cas-spm-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-cas-spm-INT.CN-PreProd: +- name: CD_ts-cas-spm INT +- alertingProfile: CD_ts-cas-spm/alerting-profile/CDts-cas-spm-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-spm/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_ts-cas-spm/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-spm/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-spm/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_ts-cas-spm/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-spm/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-spm/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_ts-cas-spm/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..992ccead --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-spm/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- ts-cas-spm: default.json + +ts-cas-spm: +- name: CD_ts-cas-spm - +- mzName: CD_ts-cas-spm/management-zone/CDts-cas-spm.name +- mzId: CD_ts-cas-spm/management-zone/CDts-cas-spm.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-stm/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_ts-cas-stm/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..a5580e89 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-stm/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDts-cas-stm-PROD: default.json +- CDts-cas-stm-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-cas-stm-PROD: +- name: CD_ts-cas-stm PROD +- tag: ts-cas-stm +- mzId: CD_ts-cas-stm/management-zone/CDts-cas-stm.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDts-cas-stm-PROD.EMEA-Prod: +- name: CD_ts-cas-stm PROD +- tag: ts-cas-stm +- mzId: CD_ts-cas-stm/management-zone/CDts-cas-stm.id +- env: PROD +- skipDeployment: "false" +CDts-cas-stm-PROD.NA-Prod: +- name: CD_ts-cas-stm PROD +- tag: ts-cas-stm +- mzId: CD_ts-cas-stm/management-zone/CDts-cas-stm.id +- env: PROD +- skipDeployment: "false" +CDts-cas-stm-PROD.CN-Prod: +- name: CD_ts-cas-stm PROD +- tag: ts-cas-stm +- mzId: CD_ts-cas-stm/management-zone/CDts-cas-stm.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-cas-stm-INT: +- name: CD_ts-cas-stm INT +- tag: ts-cas-stm +- mzId: CD_ts-cas-stm/management-zone/CDts-cas-stm.id +- env: INT +- skipDeployment: "true" +#Configuration +CDts-cas-stm-INT.EMEA-PreProd: +- name: CD_ts-cas-stm INT +- tag: ts-cas-stm +- mzId: CD_ts-cas-stm/management-zone/CDts-cas-stm.id +- env: INT +- skipDeployment: "false" +CDts-cas-stm-INT.NA-PreProd: +- name: CD_ts-cas-stm INT +- tag: ts-cas-stm +- mzId: CD_ts-cas-stm/management-zone/CDts-cas-stm.id +- env: INT +- skipDeployment: "false" +CDts-cas-stm-INT.CN-PreProd: +- name: CD_ts-cas-stm INT +- tag: ts-cas-stm +- mzId: CD_ts-cas-stm/management-zone/CDts-cas-stm.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-stm/alerting-profile/default.json b/BMW-Dynatrace-config/CD_ts-cas-stm/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-stm/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-stm/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_ts-cas-stm/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-stm/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-stm/custom-service-java/README.md b/BMW-Dynatrace-config/CD_ts-cas-stm/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-stm/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-stm/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_ts-cas-stm/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-stm/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-stm/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_ts-cas-stm/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-stm/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-stm/dashboard/README.md b/BMW-Dynatrace-config/CD_ts-cas-stm/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-stm/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-stm/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_ts-cas-stm/dashboard/dashboard.yaml new file mode 100644 index 00000000..0605db8e --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-stm/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDts-cas-stm-PROD-E2E: defaultPRODE2E.json +- CDts-cas-stm-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDts-cas-stm-PROD-E2E: +- name: CD_ts-cas-stm PROD-E2E +- mzName: CD_ts-cas-stm/management-zone/CDts-cas-stm.name +- mzId: CD_ts-cas-stm/management-zone/CDts-cas-stm.id +- skipDeployment: "true" +#Configuration +CDts-cas-stm-PROD-E2E.EMEA-Prod: +- name: CD_ts-cas-stm PROD-E2E +- mzName: CD_ts-cas-stm/management-zone/CDts-cas-stm.name +- mzId: CD_ts-cas-stm/management-zone/CDts-cas-stm.id +- tag: ts-cas-stm +- skipDeployment: "false" +CDts-cas-stm-PROD-E2E.NA-Prod: +- name: CD_ts-cas-stm PROD-E2E +- mzName: CD_ts-cas-stm/management-zone/CDts-cas-stm.name +- mzId: CD_ts-cas-stm/management-zone/CDts-cas-stm.id +- tag: ts-cas-stm +- skipDeployment: "false" +CDts-cas-stm-PROD-E2E.CN-Prod: +- name: CD_ts-cas-stm PROD-E2E +- mzName: CD_ts-cas-stm/management-zone/CDts-cas-stm.name +- mzId: CD_ts-cas-stm/management-zone/CDts-cas-stm.id +- tag: ts-cas-stm +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDts-cas-stm-INT-TEST: +- name: CD_ts-cas-stm INT-TEST +- mzName: CD_ts-cas-stm/management-zone/CDts-cas-stm.name +- mzId: CD_ts-cas-stm/management-zone/CDts-cas-stm.id +- tag: ts-cas-stm +- skipDeployment: "true" +#Configuration +CDts-cas-stm-INT-TEST.EMEA-PreProd: +- name: CD_ts-cas-stm INT-TEST +- mzName: CD_ts-cas-stm/management-zone/CDts-cas-stm.name +- mzId: CD_ts-cas-stm/management-zone/CDts-cas-stm.id +- tag: ts-cas-stm +- skipDeployment: "false" +CDts-cas-stm-INT-TEST.NA-PreProd: +- name: CD_ts-cas-stm INT-TEST +- mzName: CD_ts-cas-stm/management-zone/CDts-cas-stm.name +- mzId: CD_ts-cas-stm/management-zone/CDts-cas-stm.id +- env: INT +- skipDeployment: "false" +CDts-cas-stm-INT-TEST.CN-PreProd: +- name: CD_ts-cas-stm INT-TEST +- mzName: CD_ts-cas-stm/management-zone/CDts-cas-stm.name +- mzId: CD_ts-cas-stm/management-zone/CDts-cas-stm.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-stm/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_ts-cas-stm/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-stm/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-stm/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_ts-cas-stm/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-stm/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-stm/management-zone/README.md b/BMW-Dynatrace-config/CD_ts-cas-stm/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-stm/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_ts-cas-stm/management-zone/default.json b/BMW-Dynatrace-config/CD_ts-cas-stm/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-stm/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-stm/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_ts-cas-stm/management-zone/management-zone.yaml new file mode 100644 index 00000000..60c851a4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-stm/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDts-cas-stm: default.json + +CDts-cas-stm: +- name: CD_ts-cas-stm +- tag: ts-cas-stm diff --git a/BMW-Dynatrace-config/CD_ts-cas-stm/notification/README.md b/BMW-Dynatrace-config/CD_ts-cas-stm/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-stm/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-stm/notification/email.json b/BMW-Dynatrace-config/CD_ts-cas-stm/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-stm/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-stm/notification/msTeams.json b/BMW-Dynatrace-config/CD_ts-cas-stm/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-stm/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-stm/notification/notification.yaml b/BMW-Dynatrace-config/CD_ts-cas-stm/notification/notification.yaml new file mode 100644 index 00000000..d8367add --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-stm/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDts-cas-stm-PROD: msTeams.json +- CDts-cas-stm-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-cas-stm-PROD: +- name: CD_ts-cas-stm PROD +- alertingProfile: CD_ts-cas-stm/alerting-profile/CDts-cas-stm-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-cas-stm-PROD.EMEA-Prod: +- name: CD_ts-cas-stm PROD +- alertingProfile: CD_ts-cas-stm/alerting-profile/CDts-cas-stm-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-cas-stm-PROD.NA-Prod: +- name: CD_ts-cas-stm PROD +- alertingProfile: CD_ts-cas-stm/alerting-profile/CDts-cas-stm-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-cas-stm-PROD.CN-Prod: +- name: CD_ts-cas-stm PROD +- alertingProfile: CD_ts-cas-stm/alerting-profile/CDts-cas-stm-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-cas-stm-INT: +- name: CD_ts-cas-stm INT +- alertingProfile: CD_ts-cas-stm/alerting-profile/CDts-cas-stm-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-cas-stm-INT.EMEA-PreProd: +- name: CD_ts-cas-stm INT +- alertingProfile: CD_ts-cas-stm/alerting-profile/CDts-cas-stm-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-cas-stm-INT.NA-PreProd: +- name: CD_ts-cas-stm INT +- alertingProfile: CD_ts-cas-stm/alerting-profile/CDts-cas-stm-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-cas-stm-INT.CN-PreProd: +- name: CD_ts-cas-stm INT +- alertingProfile: CD_ts-cas-stm/alerting-profile/CDts-cas-stm-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-stm/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_ts-cas-stm/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-stm/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-stm/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_ts-cas-stm/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-stm/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-stm/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_ts-cas-stm/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..15df7772 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-stm/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- ts-cas-stm: default.json + +ts-cas-stm: +- name: CD_ts-cas-stm - +- mzName: CD_ts-cas-stm/management-zone/CDts-cas-stm.name +- mzId: CD_ts-cas-stm/management-zone/CDts-cas-stm.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-datadispatcher/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_ts-datadispatcher/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..943b6172 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-datadispatcher/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDts-datadispatcher-PROD: default.json +- CDts-datadispatcher-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-datadispatcher-PROD: +- name: CD_ts-datadispatcher PROD +- tag: ts-datadispatcher +- mzId: CD_ts-datadispatcher/management-zone/CDts-datadispatcher.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDts-datadispatcher-PROD.EMEA-Prod: +- name: CD_ts-datadispatcher PROD +- tag: ts-datadispatcher +- mzId: CD_ts-datadispatcher/management-zone/CDts-datadispatcher.id +- env: PROD +- skipDeployment: "false" +CDts-datadispatcher-PROD.NA-Prod: +- name: CD_ts-datadispatcher PROD +- tag: ts-datadispatcher +- mzId: CD_ts-datadispatcher/management-zone/CDts-datadispatcher.id +- env: PROD +- skipDeployment: "false" +CDts-datadispatcher-PROD.CN-Prod: +- name: CD_ts-datadispatcher PROD +- tag: ts-datadispatcher +- mzId: CD_ts-datadispatcher/management-zone/CDts-datadispatcher.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-datadispatcher-INT: +- name: CD_ts-datadispatcher INT +- tag: ts-datadispatcher +- mzId: CD_ts-datadispatcher/management-zone/CDts-datadispatcher.id +- env: INT +- skipDeployment: "true" +#Configuration +CDts-datadispatcher-INT.EMEA-PreProd: +- name: CD_ts-datadispatcher INT +- tag: ts-datadispatcher +- mzId: CD_ts-datadispatcher/management-zone/CDts-datadispatcher.id +- env: INT +- skipDeployment: "false" +CDts-datadispatcher-INT.NA-PreProd: +- name: CD_ts-datadispatcher INT +- tag: ts-datadispatcher +- mzId: CD_ts-datadispatcher/management-zone/CDts-datadispatcher.id +- env: INT +- skipDeployment: "false" +CDts-datadispatcher-INT.CN-PreProd: +- name: CD_ts-datadispatcher INT +- tag: ts-datadispatcher +- mzId: CD_ts-datadispatcher/management-zone/CDts-datadispatcher.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-datadispatcher/alerting-profile/default.json b/BMW-Dynatrace-config/CD_ts-datadispatcher/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-datadispatcher/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-datadispatcher/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_ts-datadispatcher/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-datadispatcher/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-datadispatcher/custom-service-java/README.md b/BMW-Dynatrace-config/CD_ts-datadispatcher/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-datadispatcher/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-datadispatcher/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_ts-datadispatcher/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-datadispatcher/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-datadispatcher/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_ts-datadispatcher/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-datadispatcher/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-datadispatcher/dashboard/README.md b/BMW-Dynatrace-config/CD_ts-datadispatcher/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-datadispatcher/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-datadispatcher/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_ts-datadispatcher/dashboard/dashboard.yaml new file mode 100644 index 00000000..30f765b7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-datadispatcher/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDts-datadispatcher-PROD-E2E: defaultPRODE2E.json +- CDts-datadispatcher-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDts-datadispatcher-PROD-E2E: +- name: CD_ts-datadispatcher PROD-E2E +- mzName: CD_ts-datadispatcher/management-zone/CDts-datadispatcher.name +- mzId: CD_ts-datadispatcher/management-zone/CDts-datadispatcher.id +- skipDeployment: "true" +#Configuration +CDts-datadispatcher-PROD-E2E.EMEA-Prod: +- name: CD_ts-datadispatcher PROD-E2E +- mzName: CD_ts-datadispatcher/management-zone/CDts-datadispatcher.name +- mzId: CD_ts-datadispatcher/management-zone/CDts-datadispatcher.id +- tag: ts-datadispatcher +- skipDeployment: "false" +CDts-datadispatcher-PROD-E2E.NA-Prod: +- name: CD_ts-datadispatcher PROD-E2E +- mzName: CD_ts-datadispatcher/management-zone/CDts-datadispatcher.name +- mzId: CD_ts-datadispatcher/management-zone/CDts-datadispatcher.id +- tag: ts-datadispatcher +- skipDeployment: "false" +CDts-datadispatcher-PROD-E2E.CN-Prod: +- name: CD_ts-datadispatcher PROD-E2E +- mzName: CD_ts-datadispatcher/management-zone/CDts-datadispatcher.name +- mzId: CD_ts-datadispatcher/management-zone/CDts-datadispatcher.id +- tag: ts-datadispatcher +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDts-datadispatcher-INT-TEST: +- name: CD_ts-datadispatcher INT-TEST +- mzName: CD_ts-datadispatcher/management-zone/CDts-datadispatcher.name +- mzId: CD_ts-datadispatcher/management-zone/CDts-datadispatcher.id +- tag: ts-datadispatcher +- skipDeployment: "true" +#Configuration +CDts-datadispatcher-INT-TEST.EMEA-PreProd: +- name: CD_ts-datadispatcher INT-TEST +- mzName: CD_ts-datadispatcher/management-zone/CDts-datadispatcher.name +- mzId: CD_ts-datadispatcher/management-zone/CDts-datadispatcher.id +- tag: ts-datadispatcher +- skipDeployment: "false" +CDts-datadispatcher-INT-TEST.NA-PreProd: +- name: CD_ts-datadispatcher INT-TEST +- mzName: CD_ts-datadispatcher/management-zone/CDts-datadispatcher.name +- mzId: CD_ts-datadispatcher/management-zone/CDts-datadispatcher.id +- env: INT +- skipDeployment: "false" +CDts-datadispatcher-INT-TEST.CN-PreProd: +- name: CD_ts-datadispatcher INT-TEST +- mzName: CD_ts-datadispatcher/management-zone/CDts-datadispatcher.name +- mzId: CD_ts-datadispatcher/management-zone/CDts-datadispatcher.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-datadispatcher/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_ts-datadispatcher/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-datadispatcher/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-datadispatcher/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_ts-datadispatcher/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-datadispatcher/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-datadispatcher/management-zone/README.md b/BMW-Dynatrace-config/CD_ts-datadispatcher/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-datadispatcher/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_ts-datadispatcher/management-zone/default.json b/BMW-Dynatrace-config/CD_ts-datadispatcher/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-datadispatcher/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-datadispatcher/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_ts-datadispatcher/management-zone/management-zone.yaml new file mode 100644 index 00000000..f4ede9d2 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-datadispatcher/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDts-datadispatcher: default.json + +CDts-datadispatcher: +- name: CD_ts-datadispatcher +- tag: ts-datadispatcher diff --git a/BMW-Dynatrace-config/CD_ts-datadispatcher/notification/README.md b/BMW-Dynatrace-config/CD_ts-datadispatcher/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-datadispatcher/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-datadispatcher/notification/email.json b/BMW-Dynatrace-config/CD_ts-datadispatcher/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-datadispatcher/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-datadispatcher/notification/msTeams.json b/BMW-Dynatrace-config/CD_ts-datadispatcher/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-datadispatcher/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-datadispatcher/notification/notification.yaml b/BMW-Dynatrace-config/CD_ts-datadispatcher/notification/notification.yaml new file mode 100644 index 00000000..b56fc5aa --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-datadispatcher/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDts-datadispatcher-PROD: msTeams.json +- CDts-datadispatcher-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-datadispatcher-PROD: +- name: CD_ts-datadispatcher PROD +- alertingProfile: CD_ts-datadispatcher/alerting-profile/CDts-datadispatcher-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-datadispatcher-PROD.EMEA-Prod: +- name: CD_ts-datadispatcher PROD +- alertingProfile: CD_ts-datadispatcher/alerting-profile/CDts-datadispatcher-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-datadispatcher-PROD.NA-Prod: +- name: CD_ts-datadispatcher PROD +- alertingProfile: CD_ts-datadispatcher/alerting-profile/CDts-datadispatcher-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-datadispatcher-PROD.CN-Prod: +- name: CD_ts-datadispatcher PROD +- alertingProfile: CD_ts-datadispatcher/alerting-profile/CDts-datadispatcher-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-datadispatcher-INT: +- name: CD_ts-datadispatcher INT +- alertingProfile: CD_ts-datadispatcher/alerting-profile/CDts-datadispatcher-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-datadispatcher-INT.EMEA-PreProd: +- name: CD_ts-datadispatcher INT +- alertingProfile: CD_ts-datadispatcher/alerting-profile/CDts-datadispatcher-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-datadispatcher-INT.NA-PreProd: +- name: CD_ts-datadispatcher INT +- alertingProfile: CD_ts-datadispatcher/alerting-profile/CDts-datadispatcher-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-datadispatcher-INT.CN-PreProd: +- name: CD_ts-datadispatcher INT +- alertingProfile: CD_ts-datadispatcher/alerting-profile/CDts-datadispatcher-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-datadispatcher/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_ts-datadispatcher/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-datadispatcher/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-datadispatcher/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_ts-datadispatcher/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-datadispatcher/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-datadispatcher/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_ts-datadispatcher/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..2bab1421 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-datadispatcher/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- ts-datadispatcher: default.json + +ts-datadispatcher: +- name: CD_ts-datadispatcher - +- mzName: CD_ts-datadispatcher/management-zone/CDts-datadispatcher.name +- mzId: CD_ts-datadispatcher/management-zone/CDts-datadispatcher.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-diagservice/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_ts-diagservice/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..bbf828d0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-diagservice/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDts-diagservice-PROD: default.json +- CDts-diagservice-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-diagservice-PROD: +- name: CD_ts-diagservice PROD +- tag: ts-diagservice +- mzId: CD_ts-diagservice/management-zone/CDts-diagservice.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDts-diagservice-PROD.EMEA-Prod: +- name: CD_ts-diagservice PROD +- tag: ts-diagservice +- mzId: CD_ts-diagservice/management-zone/CDts-diagservice.id +- env: PROD +- skipDeployment: "false" +CDts-diagservice-PROD.NA-Prod: +- name: CD_ts-diagservice PROD +- tag: ts-diagservice +- mzId: CD_ts-diagservice/management-zone/CDts-diagservice.id +- env: PROD +- skipDeployment: "false" +CDts-diagservice-PROD.CN-Prod: +- name: CD_ts-diagservice PROD +- tag: ts-diagservice +- mzId: CD_ts-diagservice/management-zone/CDts-diagservice.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-diagservice-INT: +- name: CD_ts-diagservice INT +- tag: ts-diagservice +- mzId: CD_ts-diagservice/management-zone/CDts-diagservice.id +- env: INT +- skipDeployment: "true" +#Configuration +CDts-diagservice-INT.EMEA-PreProd: +- name: CD_ts-diagservice INT +- tag: ts-diagservice +- mzId: CD_ts-diagservice/management-zone/CDts-diagservice.id +- env: INT +- skipDeployment: "false" +CDts-diagservice-INT.NA-PreProd: +- name: CD_ts-diagservice INT +- tag: ts-diagservice +- mzId: CD_ts-diagservice/management-zone/CDts-diagservice.id +- env: INT +- skipDeployment: "false" +CDts-diagservice-INT.CN-PreProd: +- name: CD_ts-diagservice INT +- tag: ts-diagservice +- mzId: CD_ts-diagservice/management-zone/CDts-diagservice.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-diagservice/alerting-profile/default.json b/BMW-Dynatrace-config/CD_ts-diagservice/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-diagservice/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-diagservice/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_ts-diagservice/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-diagservice/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-diagservice/custom-service-java/README.md b/BMW-Dynatrace-config/CD_ts-diagservice/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-diagservice/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-diagservice/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_ts-diagservice/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-diagservice/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-diagservice/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_ts-diagservice/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-diagservice/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-diagservice/dashboard/README.md b/BMW-Dynatrace-config/CD_ts-diagservice/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-diagservice/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-diagservice/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_ts-diagservice/dashboard/dashboard.yaml new file mode 100644 index 00000000..8c17df96 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-diagservice/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDts-diagservice-PROD-E2E: defaultPRODE2E.json +- CDts-diagservice-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDts-diagservice-PROD-E2E: +- name: CD_ts-diagservice PROD-E2E +- mzName: CD_ts-diagservice/management-zone/CDts-diagservice.name +- mzId: CD_ts-diagservice/management-zone/CDts-diagservice.id +- skipDeployment: "true" +#Configuration +CDts-diagservice-PROD-E2E.EMEA-Prod: +- name: CD_ts-diagservice PROD-E2E +- mzName: CD_ts-diagservice/management-zone/CDts-diagservice.name +- mzId: CD_ts-diagservice/management-zone/CDts-diagservice.id +- tag: ts-diagservice +- skipDeployment: "false" +CDts-diagservice-PROD-E2E.NA-Prod: +- name: CD_ts-diagservice PROD-E2E +- mzName: CD_ts-diagservice/management-zone/CDts-diagservice.name +- mzId: CD_ts-diagservice/management-zone/CDts-diagservice.id +- tag: ts-diagservice +- skipDeployment: "false" +CDts-diagservice-PROD-E2E.CN-Prod: +- name: CD_ts-diagservice PROD-E2E +- mzName: CD_ts-diagservice/management-zone/CDts-diagservice.name +- mzId: CD_ts-diagservice/management-zone/CDts-diagservice.id +- tag: ts-diagservice +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDts-diagservice-INT-TEST: +- name: CD_ts-diagservice INT-TEST +- mzName: CD_ts-diagservice/management-zone/CDts-diagservice.name +- mzId: CD_ts-diagservice/management-zone/CDts-diagservice.id +- tag: ts-diagservice +- skipDeployment: "true" +#Configuration +CDts-diagservice-INT-TEST.EMEA-PreProd: +- name: CD_ts-diagservice INT-TEST +- mzName: CD_ts-diagservice/management-zone/CDts-diagservice.name +- mzId: CD_ts-diagservice/management-zone/CDts-diagservice.id +- tag: ts-diagservice +- skipDeployment: "false" +CDts-diagservice-INT-TEST.NA-PreProd: +- name: CD_ts-diagservice INT-TEST +- mzName: CD_ts-diagservice/management-zone/CDts-diagservice.name +- mzId: CD_ts-diagservice/management-zone/CDts-diagservice.id +- env: INT +- skipDeployment: "false" +CDts-diagservice-INT-TEST.CN-PreProd: +- name: CD_ts-diagservice INT-TEST +- mzName: CD_ts-diagservice/management-zone/CDts-diagservice.name +- mzId: CD_ts-diagservice/management-zone/CDts-diagservice.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-diagservice/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_ts-diagservice/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-diagservice/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-diagservice/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_ts-diagservice/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-diagservice/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-diagservice/management-zone/README.md b/BMW-Dynatrace-config/CD_ts-diagservice/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-diagservice/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_ts-diagservice/management-zone/default.json b/BMW-Dynatrace-config/CD_ts-diagservice/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-diagservice/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-diagservice/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_ts-diagservice/management-zone/management-zone.yaml new file mode 100644 index 00000000..14900cdf --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-diagservice/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDts-diagservice: default.json + +CDts-diagservice: +- name: CD_ts-diagservice +- tag: ts-diagservice diff --git a/BMW-Dynatrace-config/CD_ts-diagservice/notification/README.md b/BMW-Dynatrace-config/CD_ts-diagservice/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-diagservice/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-diagservice/notification/email.json b/BMW-Dynatrace-config/CD_ts-diagservice/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-diagservice/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-diagservice/notification/msTeams.json b/BMW-Dynatrace-config/CD_ts-diagservice/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-diagservice/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-diagservice/notification/notification.yaml b/BMW-Dynatrace-config/CD_ts-diagservice/notification/notification.yaml new file mode 100644 index 00000000..b81e4a17 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-diagservice/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDts-diagservice-PROD: msTeams.json +- CDts-diagservice-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-diagservice-PROD: +- name: CD_ts-diagservice PROD +- alertingProfile: CD_ts-diagservice/alerting-profile/CDts-diagservice-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-diagservice-PROD.EMEA-Prod: +- name: CD_ts-diagservice PROD +- alertingProfile: CD_ts-diagservice/alerting-profile/CDts-diagservice-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-diagservice-PROD.NA-Prod: +- name: CD_ts-diagservice PROD +- alertingProfile: CD_ts-diagservice/alerting-profile/CDts-diagservice-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-diagservice-PROD.CN-Prod: +- name: CD_ts-diagservice PROD +- alertingProfile: CD_ts-diagservice/alerting-profile/CDts-diagservice-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-diagservice-INT: +- name: CD_ts-diagservice INT +- alertingProfile: CD_ts-diagservice/alerting-profile/CDts-diagservice-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-diagservice-INT.EMEA-PreProd: +- name: CD_ts-diagservice INT +- alertingProfile: CD_ts-diagservice/alerting-profile/CDts-diagservice-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-diagservice-INT.NA-PreProd: +- name: CD_ts-diagservice INT +- alertingProfile: CD_ts-diagservice/alerting-profile/CDts-diagservice-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-diagservice-INT.CN-PreProd: +- name: CD_ts-diagservice INT +- alertingProfile: CD_ts-diagservice/alerting-profile/CDts-diagservice-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-diagservice/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_ts-diagservice/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-diagservice/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-diagservice/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_ts-diagservice/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-diagservice/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-diagservice/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_ts-diagservice/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..d73c3bb0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-diagservice/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- ts-diagservice: default.json + +ts-diagservice: +- name: CD_ts-diagservice - +- mzName: CD_ts-diagservice/management-zone/CDts-diagservice.name +- mzId: CD_ts-diagservice/management-zone/CDts-diagservice.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-eshad/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_ts-eshad/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..81334c93 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-eshad/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDts-eshad-PROD: default.json +- CDts-eshad-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-eshad-PROD: +- name: CD_ts-eshad PROD +- tag: ts-eshad +- mzId: CD_ts-eshad/management-zone/CDts-eshad.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDts-eshad-PROD.EMEA-Prod: +- name: CD_ts-eshad PROD +- tag: ts-eshad +- mzId: CD_ts-eshad/management-zone/CDts-eshad.id +- env: PROD +- skipDeployment: "false" +CDts-eshad-PROD.NA-Prod: +- name: CD_ts-eshad PROD +- tag: ts-eshad +- mzId: CD_ts-eshad/management-zone/CDts-eshad.id +- env: PROD +- skipDeployment: "false" +CDts-eshad-PROD.CN-Prod: +- name: CD_ts-eshad PROD +- tag: ts-eshad +- mzId: CD_ts-eshad/management-zone/CDts-eshad.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-eshad-INT: +- name: CD_ts-eshad INT +- tag: ts-eshad +- mzId: CD_ts-eshad/management-zone/CDts-eshad.id +- env: INT +- skipDeployment: "true" +#Configuration +CDts-eshad-INT.EMEA-PreProd: +- name: CD_ts-eshad INT +- tag: ts-eshad +- mzId: CD_ts-eshad/management-zone/CDts-eshad.id +- env: INT +- skipDeployment: "false" +CDts-eshad-INT.NA-PreProd: +- name: CD_ts-eshad INT +- tag: ts-eshad +- mzId: CD_ts-eshad/management-zone/CDts-eshad.id +- env: INT +- skipDeployment: "false" +CDts-eshad-INT.CN-PreProd: +- name: CD_ts-eshad INT +- tag: ts-eshad +- mzId: CD_ts-eshad/management-zone/CDts-eshad.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-eshad/alerting-profile/default.json b/BMW-Dynatrace-config/CD_ts-eshad/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-eshad/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-eshad/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_ts-eshad/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-eshad/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-eshad/custom-service-java/README.md b/BMW-Dynatrace-config/CD_ts-eshad/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-eshad/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-eshad/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_ts-eshad/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-eshad/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-eshad/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_ts-eshad/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-eshad/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-eshad/dashboard/README.md b/BMW-Dynatrace-config/CD_ts-eshad/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-eshad/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-eshad/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_ts-eshad/dashboard/dashboard.yaml new file mode 100644 index 00000000..b8bcac75 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-eshad/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDts-eshad-PROD-E2E: defaultPRODE2E.json +- CDts-eshad-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDts-eshad-PROD-E2E: +- name: CD_ts-eshad PROD-E2E +- mzName: CD_ts-eshad/management-zone/CDts-eshad.name +- mzId: CD_ts-eshad/management-zone/CDts-eshad.id +- skipDeployment: "true" +#Configuration +CDts-eshad-PROD-E2E.EMEA-Prod: +- name: CD_ts-eshad PROD-E2E +- mzName: CD_ts-eshad/management-zone/CDts-eshad.name +- mzId: CD_ts-eshad/management-zone/CDts-eshad.id +- tag: ts-eshad +- skipDeployment: "false" +CDts-eshad-PROD-E2E.NA-Prod: +- name: CD_ts-eshad PROD-E2E +- mzName: CD_ts-eshad/management-zone/CDts-eshad.name +- mzId: CD_ts-eshad/management-zone/CDts-eshad.id +- tag: ts-eshad +- skipDeployment: "false" +CDts-eshad-PROD-E2E.CN-Prod: +- name: CD_ts-eshad PROD-E2E +- mzName: CD_ts-eshad/management-zone/CDts-eshad.name +- mzId: CD_ts-eshad/management-zone/CDts-eshad.id +- tag: ts-eshad +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDts-eshad-INT-TEST: +- name: CD_ts-eshad INT-TEST +- mzName: CD_ts-eshad/management-zone/CDts-eshad.name +- mzId: CD_ts-eshad/management-zone/CDts-eshad.id +- tag: ts-eshad +- skipDeployment: "true" +#Configuration +CDts-eshad-INT-TEST.EMEA-PreProd: +- name: CD_ts-eshad INT-TEST +- mzName: CD_ts-eshad/management-zone/CDts-eshad.name +- mzId: CD_ts-eshad/management-zone/CDts-eshad.id +- tag: ts-eshad +- skipDeployment: "false" +CDts-eshad-INT-TEST.NA-PreProd: +- name: CD_ts-eshad INT-TEST +- mzName: CD_ts-eshad/management-zone/CDts-eshad.name +- mzId: CD_ts-eshad/management-zone/CDts-eshad.id +- env: INT +- skipDeployment: "false" +CDts-eshad-INT-TEST.CN-PreProd: +- name: CD_ts-eshad INT-TEST +- mzName: CD_ts-eshad/management-zone/CDts-eshad.name +- mzId: CD_ts-eshad/management-zone/CDts-eshad.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-eshad/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_ts-eshad/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-eshad/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-eshad/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_ts-eshad/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-eshad/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-eshad/management-zone/README.md b/BMW-Dynatrace-config/CD_ts-eshad/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-eshad/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_ts-eshad/management-zone/default.json b/BMW-Dynatrace-config/CD_ts-eshad/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-eshad/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-eshad/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_ts-eshad/management-zone/management-zone.yaml new file mode 100644 index 00000000..6e3868aa --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-eshad/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDts-eshad: default.json + +CDts-eshad: +- name: CD_ts-eshad +- tag: ts-eshad diff --git a/BMW-Dynatrace-config/CD_ts-eshad/notification/README.md b/BMW-Dynatrace-config/CD_ts-eshad/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-eshad/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-eshad/notification/email.json b/BMW-Dynatrace-config/CD_ts-eshad/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-eshad/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-eshad/notification/msTeams.json b/BMW-Dynatrace-config/CD_ts-eshad/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-eshad/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-eshad/notification/notification.yaml b/BMW-Dynatrace-config/CD_ts-eshad/notification/notification.yaml new file mode 100644 index 00000000..731404d3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-eshad/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDts-eshad-PROD: msTeams.json +- CDts-eshad-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-eshad-PROD: +- name: CD_ts-eshad PROD +- alertingProfile: CD_ts-eshad/alerting-profile/CDts-eshad-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-eshad-PROD.EMEA-Prod: +- name: CD_ts-eshad PROD +- alertingProfile: CD_ts-eshad/alerting-profile/CDts-eshad-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-eshad-PROD.NA-Prod: +- name: CD_ts-eshad PROD +- alertingProfile: CD_ts-eshad/alerting-profile/CDts-eshad-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-eshad-PROD.CN-Prod: +- name: CD_ts-eshad PROD +- alertingProfile: CD_ts-eshad/alerting-profile/CDts-eshad-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-eshad-INT: +- name: CD_ts-eshad INT +- alertingProfile: CD_ts-eshad/alerting-profile/CDts-eshad-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-eshad-INT.EMEA-PreProd: +- name: CD_ts-eshad INT +- alertingProfile: CD_ts-eshad/alerting-profile/CDts-eshad-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-eshad-INT.NA-PreProd: +- name: CD_ts-eshad INT +- alertingProfile: CD_ts-eshad/alerting-profile/CDts-eshad-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-eshad-INT.CN-PreProd: +- name: CD_ts-eshad INT +- alertingProfile: CD_ts-eshad/alerting-profile/CDts-eshad-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-eshad/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_ts-eshad/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-eshad/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-eshad/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_ts-eshad/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-eshad/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-eshad/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_ts-eshad/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..b909f801 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-eshad/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- ts-eshad: default.json + +ts-eshad: +- name: CD_ts-eshad - +- mzName: CD_ts-eshad/management-zone/CDts-eshad.name +- mzId: CD_ts-eshad/management-zone/CDts-eshad.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-message-receiver/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_ts-message-receiver/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..502f5733 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-message-receiver/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDts-message-receiver-PROD: default.json +- CDts-message-receiver-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-message-receiver-PROD: +- name: CD_ts-message-receiver PROD +- tag: ts-message-receiver +- mzId: CD_ts-message-receiver/management-zone/CDts-message-receiver.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDts-message-receiver-PROD.EMEA-Prod: +- name: CD_ts-message-receiver PROD +- tag: ts-message-receiver +- mzId: CD_ts-message-receiver/management-zone/CDts-message-receiver.id +- env: PROD +- skipDeployment: "false" +CDts-message-receiver-PROD.NA-Prod: +- name: CD_ts-message-receiver PROD +- tag: ts-message-receiver +- mzId: CD_ts-message-receiver/management-zone/CDts-message-receiver.id +- env: PROD +- skipDeployment: "false" +CDts-message-receiver-PROD.CN-Prod: +- name: CD_ts-message-receiver PROD +- tag: ts-message-receiver +- mzId: CD_ts-message-receiver/management-zone/CDts-message-receiver.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-message-receiver-INT: +- name: CD_ts-message-receiver INT +- tag: ts-message-receiver +- mzId: CD_ts-message-receiver/management-zone/CDts-message-receiver.id +- env: INT +- skipDeployment: "true" +#Configuration +CDts-message-receiver-INT.EMEA-PreProd: +- name: CD_ts-message-receiver INT +- tag: ts-message-receiver +- mzId: CD_ts-message-receiver/management-zone/CDts-message-receiver.id +- env: INT +- skipDeployment: "false" +CDts-message-receiver-INT.NA-PreProd: +- name: CD_ts-message-receiver INT +- tag: ts-message-receiver +- mzId: CD_ts-message-receiver/management-zone/CDts-message-receiver.id +- env: INT +- skipDeployment: "false" +CDts-message-receiver-INT.CN-PreProd: +- name: CD_ts-message-receiver INT +- tag: ts-message-receiver +- mzId: CD_ts-message-receiver/management-zone/CDts-message-receiver.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-message-receiver/alerting-profile/default.json b/BMW-Dynatrace-config/CD_ts-message-receiver/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-message-receiver/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-message-receiver/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_ts-message-receiver/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-message-receiver/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-message-receiver/custom-service-java/README.md b/BMW-Dynatrace-config/CD_ts-message-receiver/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-message-receiver/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-message-receiver/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_ts-message-receiver/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-message-receiver/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-message-receiver/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_ts-message-receiver/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-message-receiver/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-message-receiver/dashboard/README.md b/BMW-Dynatrace-config/CD_ts-message-receiver/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-message-receiver/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-message-receiver/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_ts-message-receiver/dashboard/dashboard.yaml new file mode 100644 index 00000000..28bbde68 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-message-receiver/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDts-message-receiver-PROD-E2E: defaultPRODE2E.json +- CDts-message-receiver-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDts-message-receiver-PROD-E2E: +- name: CD_ts-message-receiver PROD-E2E +- mzName: CD_ts-message-receiver/management-zone/CDts-message-receiver.name +- mzId: CD_ts-message-receiver/management-zone/CDts-message-receiver.id +- skipDeployment: "true" +#Configuration +CDts-message-receiver-PROD-E2E.EMEA-Prod: +- name: CD_ts-message-receiver PROD-E2E +- mzName: CD_ts-message-receiver/management-zone/CDts-message-receiver.name +- mzId: CD_ts-message-receiver/management-zone/CDts-message-receiver.id +- tag: ts-message-receiver +- skipDeployment: "false" +CDts-message-receiver-PROD-E2E.NA-Prod: +- name: CD_ts-message-receiver PROD-E2E +- mzName: CD_ts-message-receiver/management-zone/CDts-message-receiver.name +- mzId: CD_ts-message-receiver/management-zone/CDts-message-receiver.id +- tag: ts-message-receiver +- skipDeployment: "false" +CDts-message-receiver-PROD-E2E.CN-Prod: +- name: CD_ts-message-receiver PROD-E2E +- mzName: CD_ts-message-receiver/management-zone/CDts-message-receiver.name +- mzId: CD_ts-message-receiver/management-zone/CDts-message-receiver.id +- tag: ts-message-receiver +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDts-message-receiver-INT-TEST: +- name: CD_ts-message-receiver INT-TEST +- mzName: CD_ts-message-receiver/management-zone/CDts-message-receiver.name +- mzId: CD_ts-message-receiver/management-zone/CDts-message-receiver.id +- tag: ts-message-receiver +- skipDeployment: "true" +#Configuration +CDts-message-receiver-INT-TEST.EMEA-PreProd: +- name: CD_ts-message-receiver INT-TEST +- mzName: CD_ts-message-receiver/management-zone/CDts-message-receiver.name +- mzId: CD_ts-message-receiver/management-zone/CDts-message-receiver.id +- tag: ts-message-receiver +- skipDeployment: "false" +CDts-message-receiver-INT-TEST.NA-PreProd: +- name: CD_ts-message-receiver INT-TEST +- mzName: CD_ts-message-receiver/management-zone/CDts-message-receiver.name +- mzId: CD_ts-message-receiver/management-zone/CDts-message-receiver.id +- env: INT +- skipDeployment: "false" +CDts-message-receiver-INT-TEST.CN-PreProd: +- name: CD_ts-message-receiver INT-TEST +- mzName: CD_ts-message-receiver/management-zone/CDts-message-receiver.name +- mzId: CD_ts-message-receiver/management-zone/CDts-message-receiver.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-message-receiver/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_ts-message-receiver/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-message-receiver/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-message-receiver/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_ts-message-receiver/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-message-receiver/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-message-receiver/management-zone/README.md b/BMW-Dynatrace-config/CD_ts-message-receiver/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-message-receiver/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_ts-message-receiver/management-zone/default.json b/BMW-Dynatrace-config/CD_ts-message-receiver/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-message-receiver/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-message-receiver/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_ts-message-receiver/management-zone/management-zone.yaml new file mode 100644 index 00000000..fdcd5ae7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-message-receiver/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDts-message-receiver: default.json + +CDts-message-receiver: +- name: CD_ts-message-receiver +- tag: ts-message-receiver diff --git a/BMW-Dynatrace-config/CD_ts-message-receiver/notification/README.md b/BMW-Dynatrace-config/CD_ts-message-receiver/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-message-receiver/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-message-receiver/notification/email.json b/BMW-Dynatrace-config/CD_ts-message-receiver/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-message-receiver/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-message-receiver/notification/msTeams.json b/BMW-Dynatrace-config/CD_ts-message-receiver/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-message-receiver/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-message-receiver/notification/notification.yaml b/BMW-Dynatrace-config/CD_ts-message-receiver/notification/notification.yaml new file mode 100644 index 00000000..88283aee --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-message-receiver/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDts-message-receiver-PROD: msTeams.json +- CDts-message-receiver-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-message-receiver-PROD: +- name: CD_ts-message-receiver PROD +- alertingProfile: CD_ts-message-receiver/alerting-profile/CDts-message-receiver-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-message-receiver-PROD.EMEA-Prod: +- name: CD_ts-message-receiver PROD +- alertingProfile: CD_ts-message-receiver/alerting-profile/CDts-message-receiver-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-message-receiver-PROD.NA-Prod: +- name: CD_ts-message-receiver PROD +- alertingProfile: CD_ts-message-receiver/alerting-profile/CDts-message-receiver-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-message-receiver-PROD.CN-Prod: +- name: CD_ts-message-receiver PROD +- alertingProfile: CD_ts-message-receiver/alerting-profile/CDts-message-receiver-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-message-receiver-INT: +- name: CD_ts-message-receiver INT +- alertingProfile: CD_ts-message-receiver/alerting-profile/CDts-message-receiver-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-message-receiver-INT.EMEA-PreProd: +- name: CD_ts-message-receiver INT +- alertingProfile: CD_ts-message-receiver/alerting-profile/CDts-message-receiver-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-message-receiver-INT.NA-PreProd: +- name: CD_ts-message-receiver INT +- alertingProfile: CD_ts-message-receiver/alerting-profile/CDts-message-receiver-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-message-receiver-INT.CN-PreProd: +- name: CD_ts-message-receiver INT +- alertingProfile: CD_ts-message-receiver/alerting-profile/CDts-message-receiver-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-message-receiver/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_ts-message-receiver/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-message-receiver/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-message-receiver/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_ts-message-receiver/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-message-receiver/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-message-receiver/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_ts-message-receiver/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..090d3e94 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-message-receiver/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- ts-message-receiver: default.json + +ts-message-receiver: +- name: CD_ts-message-receiver - +- mzName: CD_ts-message-receiver/management-zone/CDts-message-receiver.name +- mzId: CD_ts-message-receiver/management-zone/CDts-message-receiver.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pdmupdater/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_ts-pdmupdater/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..b5fb9ddc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pdmupdater/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDts-pdmupdater-PROD: default.json +- CDts-pdmupdater-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-pdmupdater-PROD: +- name: CD_ts-pdmupdater PROD +- tag: ts-pdmupdater +- mzId: CD_ts-pdmupdater/management-zone/CDts-pdmupdater.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDts-pdmupdater-PROD.EMEA-Prod: +- name: CD_ts-pdmupdater PROD +- tag: ts-pdmupdater +- mzId: CD_ts-pdmupdater/management-zone/CDts-pdmupdater.id +- env: PROD +- skipDeployment: "false" +CDts-pdmupdater-PROD.NA-Prod: +- name: CD_ts-pdmupdater PROD +- tag: ts-pdmupdater +- mzId: CD_ts-pdmupdater/management-zone/CDts-pdmupdater.id +- env: PROD +- skipDeployment: "false" +CDts-pdmupdater-PROD.CN-Prod: +- name: CD_ts-pdmupdater PROD +- tag: ts-pdmupdater +- mzId: CD_ts-pdmupdater/management-zone/CDts-pdmupdater.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-pdmupdater-INT: +- name: CD_ts-pdmupdater INT +- tag: ts-pdmupdater +- mzId: CD_ts-pdmupdater/management-zone/CDts-pdmupdater.id +- env: INT +- skipDeployment: "true" +#Configuration +CDts-pdmupdater-INT.EMEA-PreProd: +- name: CD_ts-pdmupdater INT +- tag: ts-pdmupdater +- mzId: CD_ts-pdmupdater/management-zone/CDts-pdmupdater.id +- env: INT +- skipDeployment: "false" +CDts-pdmupdater-INT.NA-PreProd: +- name: CD_ts-pdmupdater INT +- tag: ts-pdmupdater +- mzId: CD_ts-pdmupdater/management-zone/CDts-pdmupdater.id +- env: INT +- skipDeployment: "false" +CDts-pdmupdater-INT.CN-PreProd: +- name: CD_ts-pdmupdater INT +- tag: ts-pdmupdater +- mzId: CD_ts-pdmupdater/management-zone/CDts-pdmupdater.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pdmupdater/alerting-profile/default.json b/BMW-Dynatrace-config/CD_ts-pdmupdater/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pdmupdater/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pdmupdater/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_ts-pdmupdater/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pdmupdater/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pdmupdater/custom-service-java/README.md b/BMW-Dynatrace-config/CD_ts-pdmupdater/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pdmupdater/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pdmupdater/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_ts-pdmupdater/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pdmupdater/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pdmupdater/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_ts-pdmupdater/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pdmupdater/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pdmupdater/dashboard/README.md b/BMW-Dynatrace-config/CD_ts-pdmupdater/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pdmupdater/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pdmupdater/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_ts-pdmupdater/dashboard/dashboard.yaml new file mode 100644 index 00000000..ad087dae --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pdmupdater/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDts-pdmupdater-PROD-E2E: defaultPRODE2E.json +- CDts-pdmupdater-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDts-pdmupdater-PROD-E2E: +- name: CD_ts-pdmupdater PROD-E2E +- mzName: CD_ts-pdmupdater/management-zone/CDts-pdmupdater.name +- mzId: CD_ts-pdmupdater/management-zone/CDts-pdmupdater.id +- skipDeployment: "true" +#Configuration +CDts-pdmupdater-PROD-E2E.EMEA-Prod: +- name: CD_ts-pdmupdater PROD-E2E +- mzName: CD_ts-pdmupdater/management-zone/CDts-pdmupdater.name +- mzId: CD_ts-pdmupdater/management-zone/CDts-pdmupdater.id +- tag: ts-pdmupdater +- skipDeployment: "false" +CDts-pdmupdater-PROD-E2E.NA-Prod: +- name: CD_ts-pdmupdater PROD-E2E +- mzName: CD_ts-pdmupdater/management-zone/CDts-pdmupdater.name +- mzId: CD_ts-pdmupdater/management-zone/CDts-pdmupdater.id +- tag: ts-pdmupdater +- skipDeployment: "false" +CDts-pdmupdater-PROD-E2E.CN-Prod: +- name: CD_ts-pdmupdater PROD-E2E +- mzName: CD_ts-pdmupdater/management-zone/CDts-pdmupdater.name +- mzId: CD_ts-pdmupdater/management-zone/CDts-pdmupdater.id +- tag: ts-pdmupdater +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDts-pdmupdater-INT-TEST: +- name: CD_ts-pdmupdater INT-TEST +- mzName: CD_ts-pdmupdater/management-zone/CDts-pdmupdater.name +- mzId: CD_ts-pdmupdater/management-zone/CDts-pdmupdater.id +- tag: ts-pdmupdater +- skipDeployment: "true" +#Configuration +CDts-pdmupdater-INT-TEST.EMEA-PreProd: +- name: CD_ts-pdmupdater INT-TEST +- mzName: CD_ts-pdmupdater/management-zone/CDts-pdmupdater.name +- mzId: CD_ts-pdmupdater/management-zone/CDts-pdmupdater.id +- tag: ts-pdmupdater +- skipDeployment: "false" +CDts-pdmupdater-INT-TEST.NA-PreProd: +- name: CD_ts-pdmupdater INT-TEST +- mzName: CD_ts-pdmupdater/management-zone/CDts-pdmupdater.name +- mzId: CD_ts-pdmupdater/management-zone/CDts-pdmupdater.id +- env: INT +- skipDeployment: "false" +CDts-pdmupdater-INT-TEST.CN-PreProd: +- name: CD_ts-pdmupdater INT-TEST +- mzName: CD_ts-pdmupdater/management-zone/CDts-pdmupdater.name +- mzId: CD_ts-pdmupdater/management-zone/CDts-pdmupdater.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pdmupdater/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_ts-pdmupdater/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pdmupdater/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pdmupdater/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_ts-pdmupdater/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pdmupdater/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pdmupdater/management-zone/README.md b/BMW-Dynatrace-config/CD_ts-pdmupdater/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pdmupdater/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_ts-pdmupdater/management-zone/default.json b/BMW-Dynatrace-config/CD_ts-pdmupdater/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pdmupdater/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pdmupdater/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_ts-pdmupdater/management-zone/management-zone.yaml new file mode 100644 index 00000000..9b9e941e --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pdmupdater/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDts-pdmupdater: default.json + +CDts-pdmupdater: +- name: CD_ts-pdmupdater +- tag: ts-pdmupdater diff --git a/BMW-Dynatrace-config/CD_ts-pdmupdater/notification/README.md b/BMW-Dynatrace-config/CD_ts-pdmupdater/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pdmupdater/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pdmupdater/notification/email.json b/BMW-Dynatrace-config/CD_ts-pdmupdater/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pdmupdater/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pdmupdater/notification/msTeams.json b/BMW-Dynatrace-config/CD_ts-pdmupdater/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pdmupdater/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pdmupdater/notification/notification.yaml b/BMW-Dynatrace-config/CD_ts-pdmupdater/notification/notification.yaml new file mode 100644 index 00000000..8f2ce914 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pdmupdater/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDts-pdmupdater-PROD: msTeams.json +- CDts-pdmupdater-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-pdmupdater-PROD: +- name: CD_ts-pdmupdater PROD +- alertingProfile: CD_ts-pdmupdater/alerting-profile/CDts-pdmupdater-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-pdmupdater-PROD.EMEA-Prod: +- name: CD_ts-pdmupdater PROD +- alertingProfile: CD_ts-pdmupdater/alerting-profile/CDts-pdmupdater-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-pdmupdater-PROD.NA-Prod: +- name: CD_ts-pdmupdater PROD +- alertingProfile: CD_ts-pdmupdater/alerting-profile/CDts-pdmupdater-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-pdmupdater-PROD.CN-Prod: +- name: CD_ts-pdmupdater PROD +- alertingProfile: CD_ts-pdmupdater/alerting-profile/CDts-pdmupdater-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-pdmupdater-INT: +- name: CD_ts-pdmupdater INT +- alertingProfile: CD_ts-pdmupdater/alerting-profile/CDts-pdmupdater-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-pdmupdater-INT.EMEA-PreProd: +- name: CD_ts-pdmupdater INT +- alertingProfile: CD_ts-pdmupdater/alerting-profile/CDts-pdmupdater-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-pdmupdater-INT.NA-PreProd: +- name: CD_ts-pdmupdater INT +- alertingProfile: CD_ts-pdmupdater/alerting-profile/CDts-pdmupdater-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-pdmupdater-INT.CN-PreProd: +- name: CD_ts-pdmupdater INT +- alertingProfile: CD_ts-pdmupdater/alerting-profile/CDts-pdmupdater-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pdmupdater/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_ts-pdmupdater/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pdmupdater/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pdmupdater/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_ts-pdmupdater/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pdmupdater/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pdmupdater/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_ts-pdmupdater/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..af224aa3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pdmupdater/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- ts-pdmupdater: default.json + +ts-pdmupdater: +- name: CD_ts-pdmupdater - +- mzName: CD_ts-pdmupdater/management-zone/CDts-pdmupdater.name +- mzId: CD_ts-pdmupdater/management-zone/CDts-pdmupdater.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pservice/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_ts-pservice/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..57e4d262 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pservice/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDts-pservice-PROD: default.json +- CDts-pservice-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-pservice-PROD: +- name: CD_ts-pservice PROD +- tag: ts-pservice +- mzId: CD_ts-pservice/management-zone/CDts-pservice.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDts-pservice-PROD.EMEA-Prod: +- name: CD_ts-pservice PROD +- tag: ts-pservice +- mzId: CD_ts-pservice/management-zone/CDts-pservice.id +- env: PROD +- skipDeployment: "false" +CDts-pservice-PROD.NA-Prod: +- name: CD_ts-pservice PROD +- tag: ts-pservice +- mzId: CD_ts-pservice/management-zone/CDts-pservice.id +- env: PROD +- skipDeployment: "false" +CDts-pservice-PROD.CN-Prod: +- name: CD_ts-pservice PROD +- tag: ts-pservice +- mzId: CD_ts-pservice/management-zone/CDts-pservice.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-pservice-INT: +- name: CD_ts-pservice INT +- tag: ts-pservice +- mzId: CD_ts-pservice/management-zone/CDts-pservice.id +- env: INT +- skipDeployment: "true" +#Configuration +CDts-pservice-INT.EMEA-PreProd: +- name: CD_ts-pservice INT +- tag: ts-pservice +- mzId: CD_ts-pservice/management-zone/CDts-pservice.id +- env: INT +- skipDeployment: "false" +CDts-pservice-INT.NA-PreProd: +- name: CD_ts-pservice INT +- tag: ts-pservice +- mzId: CD_ts-pservice/management-zone/CDts-pservice.id +- env: INT +- skipDeployment: "false" +CDts-pservice-INT.CN-PreProd: +- name: CD_ts-pservice INT +- tag: ts-pservice +- mzId: CD_ts-pservice/management-zone/CDts-pservice.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pservice/alerting-profile/default.json b/BMW-Dynatrace-config/CD_ts-pservice/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pservice/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pservice/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_ts-pservice/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pservice/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pservice/custom-service-java/README.md b/BMW-Dynatrace-config/CD_ts-pservice/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pservice/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pservice/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_ts-pservice/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pservice/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pservice/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_ts-pservice/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pservice/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pservice/dashboard/README.md b/BMW-Dynatrace-config/CD_ts-pservice/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pservice/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pservice/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_ts-pservice/dashboard/dashboard.yaml new file mode 100644 index 00000000..ab97e823 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pservice/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDts-pservice-PROD-E2E: defaultPRODE2E.json +- CDts-pservice-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDts-pservice-PROD-E2E: +- name: CD_ts-pservice PROD-E2E +- mzName: CD_ts-pservice/management-zone/CDts-pservice.name +- mzId: CD_ts-pservice/management-zone/CDts-pservice.id +- skipDeployment: "true" +#Configuration +CDts-pservice-PROD-E2E.EMEA-Prod: +- name: CD_ts-pservice PROD-E2E +- mzName: CD_ts-pservice/management-zone/CDts-pservice.name +- mzId: CD_ts-pservice/management-zone/CDts-pservice.id +- tag: ts-pservice +- skipDeployment: "false" +CDts-pservice-PROD-E2E.NA-Prod: +- name: CD_ts-pservice PROD-E2E +- mzName: CD_ts-pservice/management-zone/CDts-pservice.name +- mzId: CD_ts-pservice/management-zone/CDts-pservice.id +- tag: ts-pservice +- skipDeployment: "false" +CDts-pservice-PROD-E2E.CN-Prod: +- name: CD_ts-pservice PROD-E2E +- mzName: CD_ts-pservice/management-zone/CDts-pservice.name +- mzId: CD_ts-pservice/management-zone/CDts-pservice.id +- tag: ts-pservice +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDts-pservice-INT-TEST: +- name: CD_ts-pservice INT-TEST +- mzName: CD_ts-pservice/management-zone/CDts-pservice.name +- mzId: CD_ts-pservice/management-zone/CDts-pservice.id +- tag: ts-pservice +- skipDeployment: "true" +#Configuration +CDts-pservice-INT-TEST.EMEA-PreProd: +- name: CD_ts-pservice INT-TEST +- mzName: CD_ts-pservice/management-zone/CDts-pservice.name +- mzId: CD_ts-pservice/management-zone/CDts-pservice.id +- tag: ts-pservice +- skipDeployment: "false" +CDts-pservice-INT-TEST.NA-PreProd: +- name: CD_ts-pservice INT-TEST +- mzName: CD_ts-pservice/management-zone/CDts-pservice.name +- mzId: CD_ts-pservice/management-zone/CDts-pservice.id +- env: INT +- skipDeployment: "false" +CDts-pservice-INT-TEST.CN-PreProd: +- name: CD_ts-pservice INT-TEST +- mzName: CD_ts-pservice/management-zone/CDts-pservice.name +- mzId: CD_ts-pservice/management-zone/CDts-pservice.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pservice/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_ts-pservice/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pservice/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pservice/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_ts-pservice/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pservice/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pservice/management-zone/README.md b/BMW-Dynatrace-config/CD_ts-pservice/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pservice/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_ts-pservice/management-zone/default.json b/BMW-Dynatrace-config/CD_ts-pservice/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pservice/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pservice/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_ts-pservice/management-zone/management-zone.yaml new file mode 100644 index 00000000..ef73c0a0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pservice/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDts-pservice: default.json + +CDts-pservice: +- name: CD_ts-pservice +- tag: ts-pservice diff --git a/BMW-Dynatrace-config/CD_ts-pservice/notification/README.md b/BMW-Dynatrace-config/CD_ts-pservice/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pservice/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pservice/notification/email.json b/BMW-Dynatrace-config/CD_ts-pservice/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pservice/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pservice/notification/msTeams.json b/BMW-Dynatrace-config/CD_ts-pservice/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pservice/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pservice/notification/notification.yaml b/BMW-Dynatrace-config/CD_ts-pservice/notification/notification.yaml new file mode 100644 index 00000000..324fa91c --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pservice/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDts-pservice-PROD: msTeams.json +- CDts-pservice-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-pservice-PROD: +- name: CD_ts-pservice PROD +- alertingProfile: CD_ts-pservice/alerting-profile/CDts-pservice-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-pservice-PROD.EMEA-Prod: +- name: CD_ts-pservice PROD +- alertingProfile: CD_ts-pservice/alerting-profile/CDts-pservice-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-pservice-PROD.NA-Prod: +- name: CD_ts-pservice PROD +- alertingProfile: CD_ts-pservice/alerting-profile/CDts-pservice-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-pservice-PROD.CN-Prod: +- name: CD_ts-pservice PROD +- alertingProfile: CD_ts-pservice/alerting-profile/CDts-pservice-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-pservice-INT: +- name: CD_ts-pservice INT +- alertingProfile: CD_ts-pservice/alerting-profile/CDts-pservice-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-pservice-INT.EMEA-PreProd: +- name: CD_ts-pservice INT +- alertingProfile: CD_ts-pservice/alerting-profile/CDts-pservice-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-pservice-INT.NA-PreProd: +- name: CD_ts-pservice INT +- alertingProfile: CD_ts-pservice/alerting-profile/CDts-pservice-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-pservice-INT.CN-PreProd: +- name: CD_ts-pservice INT +- alertingProfile: CD_ts-pservice/alerting-profile/CDts-pservice-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pservice/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_ts-pservice/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pservice/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pservice/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_ts-pservice/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pservice/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pservice/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_ts-pservice/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..b45caaeb --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pservice/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- ts-pservice: default.json + +ts-pservice: +- name: CD_ts-pservice - +- mzName: CD_ts-pservice/management-zone/CDts-pservice.name +- mzId: CD_ts-pservice/management-zone/CDts-pservice.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-remotediagnosis/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_ts-remotediagnosis/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..e917dca4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-remotediagnosis/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDts-remotediagnosis-PROD: default.json +- CDts-remotediagnosis-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-remotediagnosis-PROD: +- name: CD_ts-remotediagnosis PROD +- tag: ts-remotediagnosis +- mzId: CD_ts-remotediagnosis/management-zone/CDts-remotediagnosis.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDts-remotediagnosis-PROD.EMEA-Prod: +- name: CD_ts-remotediagnosis PROD +- tag: ts-remotediagnosis +- mzId: CD_ts-remotediagnosis/management-zone/CDts-remotediagnosis.id +- env: PROD +- skipDeployment: "false" +CDts-remotediagnosis-PROD.NA-Prod: +- name: CD_ts-remotediagnosis PROD +- tag: ts-remotediagnosis +- mzId: CD_ts-remotediagnosis/management-zone/CDts-remotediagnosis.id +- env: PROD +- skipDeployment: "false" +CDts-remotediagnosis-PROD.CN-Prod: +- name: CD_ts-remotediagnosis PROD +- tag: ts-remotediagnosis +- mzId: CD_ts-remotediagnosis/management-zone/CDts-remotediagnosis.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-remotediagnosis-INT: +- name: CD_ts-remotediagnosis INT +- tag: ts-remotediagnosis +- mzId: CD_ts-remotediagnosis/management-zone/CDts-remotediagnosis.id +- env: INT +- skipDeployment: "true" +#Configuration +CDts-remotediagnosis-INT.EMEA-PreProd: +- name: CD_ts-remotediagnosis INT +- tag: ts-remotediagnosis +- mzId: CD_ts-remotediagnosis/management-zone/CDts-remotediagnosis.id +- env: INT +- skipDeployment: "false" +CDts-remotediagnosis-INT.NA-PreProd: +- name: CD_ts-remotediagnosis INT +- tag: ts-remotediagnosis +- mzId: CD_ts-remotediagnosis/management-zone/CDts-remotediagnosis.id +- env: INT +- skipDeployment: "false" +CDts-remotediagnosis-INT.CN-PreProd: +- name: CD_ts-remotediagnosis INT +- tag: ts-remotediagnosis +- mzId: CD_ts-remotediagnosis/management-zone/CDts-remotediagnosis.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-remotediagnosis/alerting-profile/default.json b/BMW-Dynatrace-config/CD_ts-remotediagnosis/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-remotediagnosis/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-remotediagnosis/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_ts-remotediagnosis/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-remotediagnosis/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-remotediagnosis/custom-service-java/README.md b/BMW-Dynatrace-config/CD_ts-remotediagnosis/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-remotediagnosis/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-remotediagnosis/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_ts-remotediagnosis/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-remotediagnosis/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-remotediagnosis/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_ts-remotediagnosis/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-remotediagnosis/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-remotediagnosis/dashboard/README.md b/BMW-Dynatrace-config/CD_ts-remotediagnosis/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-remotediagnosis/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-remotediagnosis/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_ts-remotediagnosis/dashboard/dashboard.yaml new file mode 100644 index 00000000..6cdc8631 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-remotediagnosis/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDts-remotediagnosis-PROD-E2E: defaultPRODE2E.json +- CDts-remotediagnosis-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDts-remotediagnosis-PROD-E2E: +- name: CD_ts-remotediagnosis PROD-E2E +- mzName: CD_ts-remotediagnosis/management-zone/CDts-remotediagnosis.name +- mzId: CD_ts-remotediagnosis/management-zone/CDts-remotediagnosis.id +- skipDeployment: "true" +#Configuration +CDts-remotediagnosis-PROD-E2E.EMEA-Prod: +- name: CD_ts-remotediagnosis PROD-E2E +- mzName: CD_ts-remotediagnosis/management-zone/CDts-remotediagnosis.name +- mzId: CD_ts-remotediagnosis/management-zone/CDts-remotediagnosis.id +- tag: ts-remotediagnosis +- skipDeployment: "false" +CDts-remotediagnosis-PROD-E2E.NA-Prod: +- name: CD_ts-remotediagnosis PROD-E2E +- mzName: CD_ts-remotediagnosis/management-zone/CDts-remotediagnosis.name +- mzId: CD_ts-remotediagnosis/management-zone/CDts-remotediagnosis.id +- tag: ts-remotediagnosis +- skipDeployment: "false" +CDts-remotediagnosis-PROD-E2E.CN-Prod: +- name: CD_ts-remotediagnosis PROD-E2E +- mzName: CD_ts-remotediagnosis/management-zone/CDts-remotediagnosis.name +- mzId: CD_ts-remotediagnosis/management-zone/CDts-remotediagnosis.id +- tag: ts-remotediagnosis +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDts-remotediagnosis-INT-TEST: +- name: CD_ts-remotediagnosis INT-TEST +- mzName: CD_ts-remotediagnosis/management-zone/CDts-remotediagnosis.name +- mzId: CD_ts-remotediagnosis/management-zone/CDts-remotediagnosis.id +- tag: ts-remotediagnosis +- skipDeployment: "true" +#Configuration +CDts-remotediagnosis-INT-TEST.EMEA-PreProd: +- name: CD_ts-remotediagnosis INT-TEST +- mzName: CD_ts-remotediagnosis/management-zone/CDts-remotediagnosis.name +- mzId: CD_ts-remotediagnosis/management-zone/CDts-remotediagnosis.id +- tag: ts-remotediagnosis +- skipDeployment: "false" +CDts-remotediagnosis-INT-TEST.NA-PreProd: +- name: CD_ts-remotediagnosis INT-TEST +- mzName: CD_ts-remotediagnosis/management-zone/CDts-remotediagnosis.name +- mzId: CD_ts-remotediagnosis/management-zone/CDts-remotediagnosis.id +- env: INT +- skipDeployment: "false" +CDts-remotediagnosis-INT-TEST.CN-PreProd: +- name: CD_ts-remotediagnosis INT-TEST +- mzName: CD_ts-remotediagnosis/management-zone/CDts-remotediagnosis.name +- mzId: CD_ts-remotediagnosis/management-zone/CDts-remotediagnosis.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-remotediagnosis/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_ts-remotediagnosis/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-remotediagnosis/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-remotediagnosis/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_ts-remotediagnosis/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-remotediagnosis/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-remotediagnosis/management-zone/README.md b/BMW-Dynatrace-config/CD_ts-remotediagnosis/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-remotediagnosis/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_ts-remotediagnosis/management-zone/default.json b/BMW-Dynatrace-config/CD_ts-remotediagnosis/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-remotediagnosis/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-remotediagnosis/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_ts-remotediagnosis/management-zone/management-zone.yaml new file mode 100644 index 00000000..6e3b8d60 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-remotediagnosis/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDts-remotediagnosis: default.json + +CDts-remotediagnosis: +- name: CD_ts-remotediagnosis +- tag: ts-remotediagnosis diff --git a/BMW-Dynatrace-config/CD_ts-remotediagnosis/notification/README.md b/BMW-Dynatrace-config/CD_ts-remotediagnosis/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-remotediagnosis/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-remotediagnosis/notification/email.json b/BMW-Dynatrace-config/CD_ts-remotediagnosis/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-remotediagnosis/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-remotediagnosis/notification/msTeams.json b/BMW-Dynatrace-config/CD_ts-remotediagnosis/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-remotediagnosis/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-remotediagnosis/notification/notification.yaml b/BMW-Dynatrace-config/CD_ts-remotediagnosis/notification/notification.yaml new file mode 100644 index 00000000..10fa2584 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-remotediagnosis/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDts-remotediagnosis-PROD: msTeams.json +- CDts-remotediagnosis-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-remotediagnosis-PROD: +- name: CD_ts-remotediagnosis PROD +- alertingProfile: CD_ts-remotediagnosis/alerting-profile/CDts-remotediagnosis-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-remotediagnosis-PROD.EMEA-Prod: +- name: CD_ts-remotediagnosis PROD +- alertingProfile: CD_ts-remotediagnosis/alerting-profile/CDts-remotediagnosis-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-remotediagnosis-PROD.NA-Prod: +- name: CD_ts-remotediagnosis PROD +- alertingProfile: CD_ts-remotediagnosis/alerting-profile/CDts-remotediagnosis-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-remotediagnosis-PROD.CN-Prod: +- name: CD_ts-remotediagnosis PROD +- alertingProfile: CD_ts-remotediagnosis/alerting-profile/CDts-remotediagnosis-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-remotediagnosis-INT: +- name: CD_ts-remotediagnosis INT +- alertingProfile: CD_ts-remotediagnosis/alerting-profile/CDts-remotediagnosis-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-remotediagnosis-INT.EMEA-PreProd: +- name: CD_ts-remotediagnosis INT +- alertingProfile: CD_ts-remotediagnosis/alerting-profile/CDts-remotediagnosis-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-remotediagnosis-INT.NA-PreProd: +- name: CD_ts-remotediagnosis INT +- alertingProfile: CD_ts-remotediagnosis/alerting-profile/CDts-remotediagnosis-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-remotediagnosis-INT.CN-PreProd: +- name: CD_ts-remotediagnosis INT +- alertingProfile: CD_ts-remotediagnosis/alerting-profile/CDts-remotediagnosis-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-remotediagnosis/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_ts-remotediagnosis/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-remotediagnosis/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-remotediagnosis/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_ts-remotediagnosis/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-remotediagnosis/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-remotediagnosis/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_ts-remotediagnosis/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..9978d30e --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-remotediagnosis/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- ts-remotediagnosis: default.json + +ts-remotediagnosis: +- name: CD_ts-remotediagnosis - +- mzName: CD_ts-remotediagnosis/management-zone/CDts-remotediagnosis.name +- mzId: CD_ts-remotediagnosis/management-zone/CDts-remotediagnosis.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rsurservice/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_ts-rsurservice/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..e59c0f76 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rsurservice/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDts-rsurservice-PROD: default.json +- CDts-rsurservice-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-rsurservice-PROD: +- name: CD_ts-rsurservice PROD +- tag: ts-rsurservice +- mzId: CD_ts-rsurservice/management-zone/CDts-rsurservice.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDts-rsurservice-PROD.EMEA-Prod: +- name: CD_ts-rsurservice PROD +- tag: ts-rsurservice +- mzId: CD_ts-rsurservice/management-zone/CDts-rsurservice.id +- env: PROD +- skipDeployment: "false" +CDts-rsurservice-PROD.NA-Prod: +- name: CD_ts-rsurservice PROD +- tag: ts-rsurservice +- mzId: CD_ts-rsurservice/management-zone/CDts-rsurservice.id +- env: PROD +- skipDeployment: "false" +CDts-rsurservice-PROD.CN-Prod: +- name: CD_ts-rsurservice PROD +- tag: ts-rsurservice +- mzId: CD_ts-rsurservice/management-zone/CDts-rsurservice.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-rsurservice-INT: +- name: CD_ts-rsurservice INT +- tag: ts-rsurservice +- mzId: CD_ts-rsurservice/management-zone/CDts-rsurservice.id +- env: INT +- skipDeployment: "true" +#Configuration +CDts-rsurservice-INT.EMEA-PreProd: +- name: CD_ts-rsurservice INT +- tag: ts-rsurservice +- mzId: CD_ts-rsurservice/management-zone/CDts-rsurservice.id +- env: INT +- skipDeployment: "false" +CDts-rsurservice-INT.NA-PreProd: +- name: CD_ts-rsurservice INT +- tag: ts-rsurservice +- mzId: CD_ts-rsurservice/management-zone/CDts-rsurservice.id +- env: INT +- skipDeployment: "false" +CDts-rsurservice-INT.CN-PreProd: +- name: CD_ts-rsurservice INT +- tag: ts-rsurservice +- mzId: CD_ts-rsurservice/management-zone/CDts-rsurservice.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rsurservice/alerting-profile/default.json b/BMW-Dynatrace-config/CD_ts-rsurservice/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rsurservice/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rsurservice/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_ts-rsurservice/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rsurservice/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rsurservice/custom-service-java/README.md b/BMW-Dynatrace-config/CD_ts-rsurservice/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rsurservice/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rsurservice/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_ts-rsurservice/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rsurservice/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rsurservice/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_ts-rsurservice/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rsurservice/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rsurservice/dashboard/README.md b/BMW-Dynatrace-config/CD_ts-rsurservice/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rsurservice/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rsurservice/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_ts-rsurservice/dashboard/dashboard.yaml new file mode 100644 index 00000000..966c0f0d --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rsurservice/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDts-rsurservice-PROD-E2E: defaultPRODE2E.json +- CDts-rsurservice-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDts-rsurservice-PROD-E2E: +- name: CD_ts-rsurservice PROD-E2E +- mzName: CD_ts-rsurservice/management-zone/CDts-rsurservice.name +- mzId: CD_ts-rsurservice/management-zone/CDts-rsurservice.id +- skipDeployment: "true" +#Configuration +CDts-rsurservice-PROD-E2E.EMEA-Prod: +- name: CD_ts-rsurservice PROD-E2E +- mzName: CD_ts-rsurservice/management-zone/CDts-rsurservice.name +- mzId: CD_ts-rsurservice/management-zone/CDts-rsurservice.id +- tag: ts-rsurservice +- skipDeployment: "false" +CDts-rsurservice-PROD-E2E.NA-Prod: +- name: CD_ts-rsurservice PROD-E2E +- mzName: CD_ts-rsurservice/management-zone/CDts-rsurservice.name +- mzId: CD_ts-rsurservice/management-zone/CDts-rsurservice.id +- tag: ts-rsurservice +- skipDeployment: "false" +CDts-rsurservice-PROD-E2E.CN-Prod: +- name: CD_ts-rsurservice PROD-E2E +- mzName: CD_ts-rsurservice/management-zone/CDts-rsurservice.name +- mzId: CD_ts-rsurservice/management-zone/CDts-rsurservice.id +- tag: ts-rsurservice +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDts-rsurservice-INT-TEST: +- name: CD_ts-rsurservice INT-TEST +- mzName: CD_ts-rsurservice/management-zone/CDts-rsurservice.name +- mzId: CD_ts-rsurservice/management-zone/CDts-rsurservice.id +- tag: ts-rsurservice +- skipDeployment: "true" +#Configuration +CDts-rsurservice-INT-TEST.EMEA-PreProd: +- name: CD_ts-rsurservice INT-TEST +- mzName: CD_ts-rsurservice/management-zone/CDts-rsurservice.name +- mzId: CD_ts-rsurservice/management-zone/CDts-rsurservice.id +- tag: ts-rsurservice +- skipDeployment: "false" +CDts-rsurservice-INT-TEST.NA-PreProd: +- name: CD_ts-rsurservice INT-TEST +- mzName: CD_ts-rsurservice/management-zone/CDts-rsurservice.name +- mzId: CD_ts-rsurservice/management-zone/CDts-rsurservice.id +- env: INT +- skipDeployment: "false" +CDts-rsurservice-INT-TEST.CN-PreProd: +- name: CD_ts-rsurservice INT-TEST +- mzName: CD_ts-rsurservice/management-zone/CDts-rsurservice.name +- mzId: CD_ts-rsurservice/management-zone/CDts-rsurservice.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rsurservice/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_ts-rsurservice/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rsurservice/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rsurservice/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_ts-rsurservice/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rsurservice/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rsurservice/management-zone/README.md b/BMW-Dynatrace-config/CD_ts-rsurservice/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rsurservice/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_ts-rsurservice/management-zone/default.json b/BMW-Dynatrace-config/CD_ts-rsurservice/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rsurservice/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rsurservice/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_ts-rsurservice/management-zone/management-zone.yaml new file mode 100644 index 00000000..f305b41d --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rsurservice/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDts-rsurservice: default.json + +CDts-rsurservice: +- name: CD_ts-rsurservice +- tag: ts-rsurservice diff --git a/BMW-Dynatrace-config/CD_ts-rsurservice/notification/README.md b/BMW-Dynatrace-config/CD_ts-rsurservice/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rsurservice/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rsurservice/notification/email.json b/BMW-Dynatrace-config/CD_ts-rsurservice/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rsurservice/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rsurservice/notification/msTeams.json b/BMW-Dynatrace-config/CD_ts-rsurservice/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rsurservice/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rsurservice/notification/notification.yaml b/BMW-Dynatrace-config/CD_ts-rsurservice/notification/notification.yaml new file mode 100644 index 00000000..ce597af8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rsurservice/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDts-rsurservice-PROD: msTeams.json +- CDts-rsurservice-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-rsurservice-PROD: +- name: CD_ts-rsurservice PROD +- alertingProfile: CD_ts-rsurservice/alerting-profile/CDts-rsurservice-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-rsurservice-PROD.EMEA-Prod: +- name: CD_ts-rsurservice PROD +- alertingProfile: CD_ts-rsurservice/alerting-profile/CDts-rsurservice-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-rsurservice-PROD.NA-Prod: +- name: CD_ts-rsurservice PROD +- alertingProfile: CD_ts-rsurservice/alerting-profile/CDts-rsurservice-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-rsurservice-PROD.CN-Prod: +- name: CD_ts-rsurservice PROD +- alertingProfile: CD_ts-rsurservice/alerting-profile/CDts-rsurservice-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-rsurservice-INT: +- name: CD_ts-rsurservice INT +- alertingProfile: CD_ts-rsurservice/alerting-profile/CDts-rsurservice-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-rsurservice-INT.EMEA-PreProd: +- name: CD_ts-rsurservice INT +- alertingProfile: CD_ts-rsurservice/alerting-profile/CDts-rsurservice-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-rsurservice-INT.NA-PreProd: +- name: CD_ts-rsurservice INT +- alertingProfile: CD_ts-rsurservice/alerting-profile/CDts-rsurservice-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-rsurservice-INT.CN-PreProd: +- name: CD_ts-rsurservice INT +- alertingProfile: CD_ts-rsurservice/alerting-profile/CDts-rsurservice-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rsurservice/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_ts-rsurservice/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rsurservice/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rsurservice/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_ts-rsurservice/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rsurservice/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rsurservice/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_ts-rsurservice/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..4d02f72f --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rsurservice/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- ts-rsurservice: default.json + +ts-rsurservice: +- name: CD_ts-rsurservice - +- mzName: CD_ts-rsurservice/management-zone/CDts-rsurservice.name +- mzId: CD_ts-rsurservice/management-zone/CDts-rsurservice.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcadapter/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_ts-rtcadapter/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..0308b236 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcadapter/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDts-rtcadapter-PROD: default.json +- CDts-rtcadapter-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-rtcadapter-PROD: +- name: CD_ts-rtcadapter PROD +- tag: ts-rtcadapter +- mzId: CD_ts-rtcadapter/management-zone/CDts-rtcadapter.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDts-rtcadapter-PROD.EMEA-Prod: +- name: CD_ts-rtcadapter PROD +- tag: ts-rtcadapter +- mzId: CD_ts-rtcadapter/management-zone/CDts-rtcadapter.id +- env: PROD +- skipDeployment: "false" +CDts-rtcadapter-PROD.NA-Prod: +- name: CD_ts-rtcadapter PROD +- tag: ts-rtcadapter +- mzId: CD_ts-rtcadapter/management-zone/CDts-rtcadapter.id +- env: PROD +- skipDeployment: "false" +CDts-rtcadapter-PROD.CN-Prod: +- name: CD_ts-rtcadapter PROD +- tag: ts-rtcadapter +- mzId: CD_ts-rtcadapter/management-zone/CDts-rtcadapter.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-rtcadapter-INT: +- name: CD_ts-rtcadapter INT +- tag: ts-rtcadapter +- mzId: CD_ts-rtcadapter/management-zone/CDts-rtcadapter.id +- env: INT +- skipDeployment: "true" +#Configuration +CDts-rtcadapter-INT.EMEA-PreProd: +- name: CD_ts-rtcadapter INT +- tag: ts-rtcadapter +- mzId: CD_ts-rtcadapter/management-zone/CDts-rtcadapter.id +- env: INT +- skipDeployment: "false" +CDts-rtcadapter-INT.NA-PreProd: +- name: CD_ts-rtcadapter INT +- tag: ts-rtcadapter +- mzId: CD_ts-rtcadapter/management-zone/CDts-rtcadapter.id +- env: INT +- skipDeployment: "false" +CDts-rtcadapter-INT.CN-PreProd: +- name: CD_ts-rtcadapter INT +- tag: ts-rtcadapter +- mzId: CD_ts-rtcadapter/management-zone/CDts-rtcadapter.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcadapter/alerting-profile/default.json b/BMW-Dynatrace-config/CD_ts-rtcadapter/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcadapter/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcadapter/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_ts-rtcadapter/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcadapter/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcadapter/custom-service-java/README.md b/BMW-Dynatrace-config/CD_ts-rtcadapter/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcadapter/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcadapter/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_ts-rtcadapter/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcadapter/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcadapter/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_ts-rtcadapter/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcadapter/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcadapter/dashboard/README.md b/BMW-Dynatrace-config/CD_ts-rtcadapter/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcadapter/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcadapter/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_ts-rtcadapter/dashboard/dashboard.yaml new file mode 100644 index 00000000..ae736e7e --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcadapter/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDts-rtcadapter-PROD-E2E: defaultPRODE2E.json +- CDts-rtcadapter-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDts-rtcadapter-PROD-E2E: +- name: CD_ts-rtcadapter PROD-E2E +- mzName: CD_ts-rtcadapter/management-zone/CDts-rtcadapter.name +- mzId: CD_ts-rtcadapter/management-zone/CDts-rtcadapter.id +- skipDeployment: "true" +#Configuration +CDts-rtcadapter-PROD-E2E.EMEA-Prod: +- name: CD_ts-rtcadapter PROD-E2E +- mzName: CD_ts-rtcadapter/management-zone/CDts-rtcadapter.name +- mzId: CD_ts-rtcadapter/management-zone/CDts-rtcadapter.id +- tag: ts-rtcadapter +- skipDeployment: "false" +CDts-rtcadapter-PROD-E2E.NA-Prod: +- name: CD_ts-rtcadapter PROD-E2E +- mzName: CD_ts-rtcadapter/management-zone/CDts-rtcadapter.name +- mzId: CD_ts-rtcadapter/management-zone/CDts-rtcadapter.id +- tag: ts-rtcadapter +- skipDeployment: "false" +CDts-rtcadapter-PROD-E2E.CN-Prod: +- name: CD_ts-rtcadapter PROD-E2E +- mzName: CD_ts-rtcadapter/management-zone/CDts-rtcadapter.name +- mzId: CD_ts-rtcadapter/management-zone/CDts-rtcadapter.id +- tag: ts-rtcadapter +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDts-rtcadapter-INT-TEST: +- name: CD_ts-rtcadapter INT-TEST +- mzName: CD_ts-rtcadapter/management-zone/CDts-rtcadapter.name +- mzId: CD_ts-rtcadapter/management-zone/CDts-rtcadapter.id +- tag: ts-rtcadapter +- skipDeployment: "true" +#Configuration +CDts-rtcadapter-INT-TEST.EMEA-PreProd: +- name: CD_ts-rtcadapter INT-TEST +- mzName: CD_ts-rtcadapter/management-zone/CDts-rtcadapter.name +- mzId: CD_ts-rtcadapter/management-zone/CDts-rtcadapter.id +- tag: ts-rtcadapter +- skipDeployment: "false" +CDts-rtcadapter-INT-TEST.NA-PreProd: +- name: CD_ts-rtcadapter INT-TEST +- mzName: CD_ts-rtcadapter/management-zone/CDts-rtcadapter.name +- mzId: CD_ts-rtcadapter/management-zone/CDts-rtcadapter.id +- env: INT +- skipDeployment: "false" +CDts-rtcadapter-INT-TEST.CN-PreProd: +- name: CD_ts-rtcadapter INT-TEST +- mzName: CD_ts-rtcadapter/management-zone/CDts-rtcadapter.name +- mzId: CD_ts-rtcadapter/management-zone/CDts-rtcadapter.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcadapter/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_ts-rtcadapter/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcadapter/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcadapter/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_ts-rtcadapter/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcadapter/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcadapter/management-zone/README.md b/BMW-Dynatrace-config/CD_ts-rtcadapter/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcadapter/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_ts-rtcadapter/management-zone/default.json b/BMW-Dynatrace-config/CD_ts-rtcadapter/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcadapter/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcadapter/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_ts-rtcadapter/management-zone/management-zone.yaml new file mode 100644 index 00000000..39c96652 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcadapter/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDts-rtcadapter: default.json + +CDts-rtcadapter: +- name: CD_ts-rtcadapter +- tag: ts-rtcadapter diff --git a/BMW-Dynatrace-config/CD_ts-rtcadapter/notification/README.md b/BMW-Dynatrace-config/CD_ts-rtcadapter/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcadapter/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcadapter/notification/email.json b/BMW-Dynatrace-config/CD_ts-rtcadapter/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcadapter/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcadapter/notification/msTeams.json b/BMW-Dynatrace-config/CD_ts-rtcadapter/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcadapter/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcadapter/notification/notification.yaml b/BMW-Dynatrace-config/CD_ts-rtcadapter/notification/notification.yaml new file mode 100644 index 00000000..bf61b4b4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcadapter/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDts-rtcadapter-PROD: msTeams.json +- CDts-rtcadapter-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-rtcadapter-PROD: +- name: CD_ts-rtcadapter PROD +- alertingProfile: CD_ts-rtcadapter/alerting-profile/CDts-rtcadapter-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-rtcadapter-PROD.EMEA-Prod: +- name: CD_ts-rtcadapter PROD +- alertingProfile: CD_ts-rtcadapter/alerting-profile/CDts-rtcadapter-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-rtcadapter-PROD.NA-Prod: +- name: CD_ts-rtcadapter PROD +- alertingProfile: CD_ts-rtcadapter/alerting-profile/CDts-rtcadapter-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-rtcadapter-PROD.CN-Prod: +- name: CD_ts-rtcadapter PROD +- alertingProfile: CD_ts-rtcadapter/alerting-profile/CDts-rtcadapter-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-rtcadapter-INT: +- name: CD_ts-rtcadapter INT +- alertingProfile: CD_ts-rtcadapter/alerting-profile/CDts-rtcadapter-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-rtcadapter-INT.EMEA-PreProd: +- name: CD_ts-rtcadapter INT +- alertingProfile: CD_ts-rtcadapter/alerting-profile/CDts-rtcadapter-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-rtcadapter-INT.NA-PreProd: +- name: CD_ts-rtcadapter INT +- alertingProfile: CD_ts-rtcadapter/alerting-profile/CDts-rtcadapter-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-rtcadapter-INT.CN-PreProd: +- name: CD_ts-rtcadapter INT +- alertingProfile: CD_ts-rtcadapter/alerting-profile/CDts-rtcadapter-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcadapter/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_ts-rtcadapter/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcadapter/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcadapter/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_ts-rtcadapter/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcadapter/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcadapter/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_ts-rtcadapter/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..e0c68f05 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcadapter/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- ts-rtcadapter: default.json + +ts-rtcadapter: +- name: CD_ts-rtcadapter - +- mzName: CD_ts-rtcadapter/management-zone/CDts-rtcadapter.name +- mzId: CD_ts-rtcadapter/management-zone/CDts-rtcadapter.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtchandler/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_ts-rtchandler/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..9de9f4ae --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtchandler/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDts-rtchandler-PROD: default.json +- CDts-rtchandler-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-rtchandler-PROD: +- name: CD_ts-rtchandler PROD +- tag: ts-rtchandler +- mzId: CD_ts-rtchandler/management-zone/CDts-rtchandler.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDts-rtchandler-PROD.EMEA-Prod: +- name: CD_ts-rtchandler PROD +- tag: ts-rtchandler +- mzId: CD_ts-rtchandler/management-zone/CDts-rtchandler.id +- env: PROD +- skipDeployment: "false" +CDts-rtchandler-PROD.NA-Prod: +- name: CD_ts-rtchandler PROD +- tag: ts-rtchandler +- mzId: CD_ts-rtchandler/management-zone/CDts-rtchandler.id +- env: PROD +- skipDeployment: "false" +CDts-rtchandler-PROD.CN-Prod: +- name: CD_ts-rtchandler PROD +- tag: ts-rtchandler +- mzId: CD_ts-rtchandler/management-zone/CDts-rtchandler.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-rtchandler-INT: +- name: CD_ts-rtchandler INT +- tag: ts-rtchandler +- mzId: CD_ts-rtchandler/management-zone/CDts-rtchandler.id +- env: INT +- skipDeployment: "true" +#Configuration +CDts-rtchandler-INT.EMEA-PreProd: +- name: CD_ts-rtchandler INT +- tag: ts-rtchandler +- mzId: CD_ts-rtchandler/management-zone/CDts-rtchandler.id +- env: INT +- skipDeployment: "false" +CDts-rtchandler-INT.NA-PreProd: +- name: CD_ts-rtchandler INT +- tag: ts-rtchandler +- mzId: CD_ts-rtchandler/management-zone/CDts-rtchandler.id +- env: INT +- skipDeployment: "false" +CDts-rtchandler-INT.CN-PreProd: +- name: CD_ts-rtchandler INT +- tag: ts-rtchandler +- mzId: CD_ts-rtchandler/management-zone/CDts-rtchandler.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtchandler/alerting-profile/default.json b/BMW-Dynatrace-config/CD_ts-rtchandler/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtchandler/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtchandler/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_ts-rtchandler/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtchandler/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtchandler/custom-service-java/README.md b/BMW-Dynatrace-config/CD_ts-rtchandler/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtchandler/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtchandler/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_ts-rtchandler/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtchandler/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtchandler/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_ts-rtchandler/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtchandler/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtchandler/dashboard/README.md b/BMW-Dynatrace-config/CD_ts-rtchandler/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtchandler/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtchandler/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_ts-rtchandler/dashboard/dashboard.yaml new file mode 100644 index 00000000..94f4a9e0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtchandler/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDts-rtchandler-PROD-E2E: defaultPRODE2E.json +- CDts-rtchandler-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDts-rtchandler-PROD-E2E: +- name: CD_ts-rtchandler PROD-E2E +- mzName: CD_ts-rtchandler/management-zone/CDts-rtchandler.name +- mzId: CD_ts-rtchandler/management-zone/CDts-rtchandler.id +- skipDeployment: "true" +#Configuration +CDts-rtchandler-PROD-E2E.EMEA-Prod: +- name: CD_ts-rtchandler PROD-E2E +- mzName: CD_ts-rtchandler/management-zone/CDts-rtchandler.name +- mzId: CD_ts-rtchandler/management-zone/CDts-rtchandler.id +- tag: ts-rtchandler +- skipDeployment: "false" +CDts-rtchandler-PROD-E2E.NA-Prod: +- name: CD_ts-rtchandler PROD-E2E +- mzName: CD_ts-rtchandler/management-zone/CDts-rtchandler.name +- mzId: CD_ts-rtchandler/management-zone/CDts-rtchandler.id +- tag: ts-rtchandler +- skipDeployment: "false" +CDts-rtchandler-PROD-E2E.CN-Prod: +- name: CD_ts-rtchandler PROD-E2E +- mzName: CD_ts-rtchandler/management-zone/CDts-rtchandler.name +- mzId: CD_ts-rtchandler/management-zone/CDts-rtchandler.id +- tag: ts-rtchandler +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDts-rtchandler-INT-TEST: +- name: CD_ts-rtchandler INT-TEST +- mzName: CD_ts-rtchandler/management-zone/CDts-rtchandler.name +- mzId: CD_ts-rtchandler/management-zone/CDts-rtchandler.id +- tag: ts-rtchandler +- skipDeployment: "true" +#Configuration +CDts-rtchandler-INT-TEST.EMEA-PreProd: +- name: CD_ts-rtchandler INT-TEST +- mzName: CD_ts-rtchandler/management-zone/CDts-rtchandler.name +- mzId: CD_ts-rtchandler/management-zone/CDts-rtchandler.id +- tag: ts-rtchandler +- skipDeployment: "false" +CDts-rtchandler-INT-TEST.NA-PreProd: +- name: CD_ts-rtchandler INT-TEST +- mzName: CD_ts-rtchandler/management-zone/CDts-rtchandler.name +- mzId: CD_ts-rtchandler/management-zone/CDts-rtchandler.id +- env: INT +- skipDeployment: "false" +CDts-rtchandler-INT-TEST.CN-PreProd: +- name: CD_ts-rtchandler INT-TEST +- mzName: CD_ts-rtchandler/management-zone/CDts-rtchandler.name +- mzId: CD_ts-rtchandler/management-zone/CDts-rtchandler.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtchandler/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_ts-rtchandler/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtchandler/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtchandler/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_ts-rtchandler/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtchandler/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtchandler/management-zone/README.md b/BMW-Dynatrace-config/CD_ts-rtchandler/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtchandler/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_ts-rtchandler/management-zone/default.json b/BMW-Dynatrace-config/CD_ts-rtchandler/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtchandler/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtchandler/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_ts-rtchandler/management-zone/management-zone.yaml new file mode 100644 index 00000000..a359ec9d --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtchandler/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDts-rtchandler: default.json + +CDts-rtchandler: +- name: CD_ts-rtchandler +- tag: ts-rtchandler diff --git a/BMW-Dynatrace-config/CD_ts-rtchandler/notification/README.md b/BMW-Dynatrace-config/CD_ts-rtchandler/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtchandler/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtchandler/notification/email.json b/BMW-Dynatrace-config/CD_ts-rtchandler/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtchandler/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtchandler/notification/msTeams.json b/BMW-Dynatrace-config/CD_ts-rtchandler/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtchandler/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtchandler/notification/notification.yaml b/BMW-Dynatrace-config/CD_ts-rtchandler/notification/notification.yaml new file mode 100644 index 00000000..45f9417c --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtchandler/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDts-rtchandler-PROD: msTeams.json +- CDts-rtchandler-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-rtchandler-PROD: +- name: CD_ts-rtchandler PROD +- alertingProfile: CD_ts-rtchandler/alerting-profile/CDts-rtchandler-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-rtchandler-PROD.EMEA-Prod: +- name: CD_ts-rtchandler PROD +- alertingProfile: CD_ts-rtchandler/alerting-profile/CDts-rtchandler-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-rtchandler-PROD.NA-Prod: +- name: CD_ts-rtchandler PROD +- alertingProfile: CD_ts-rtchandler/alerting-profile/CDts-rtchandler-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-rtchandler-PROD.CN-Prod: +- name: CD_ts-rtchandler PROD +- alertingProfile: CD_ts-rtchandler/alerting-profile/CDts-rtchandler-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-rtchandler-INT: +- name: CD_ts-rtchandler INT +- alertingProfile: CD_ts-rtchandler/alerting-profile/CDts-rtchandler-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-rtchandler-INT.EMEA-PreProd: +- name: CD_ts-rtchandler INT +- alertingProfile: CD_ts-rtchandler/alerting-profile/CDts-rtchandler-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-rtchandler-INT.NA-PreProd: +- name: CD_ts-rtchandler INT +- alertingProfile: CD_ts-rtchandler/alerting-profile/CDts-rtchandler-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-rtchandler-INT.CN-PreProd: +- name: CD_ts-rtchandler INT +- alertingProfile: CD_ts-rtchandler/alerting-profile/CDts-rtchandler-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtchandler/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_ts-rtchandler/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtchandler/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtchandler/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_ts-rtchandler/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtchandler/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtchandler/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_ts-rtchandler/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..2f874ba4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtchandler/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- ts-rtchandler: default.json + +ts-rtchandler: +- name: CD_ts-rtchandler - +- mzName: CD_ts-rtchandler/management-zone/CDts-rtchandler.name +- mzId: CD_ts-rtchandler/management-zone/CDts-rtchandler.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcservice/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_ts-rtcservice/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..ea95325c --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcservice/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDts-rtcservice-PROD: default.json +- CDts-rtcservice-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-rtcservice-PROD: +- name: CD_ts-rtcservice PROD +- tag: ts-rtcservice +- mzId: CD_ts-rtcservice/management-zone/CDts-rtcservice.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDts-rtcservice-PROD.EMEA-Prod: +- name: CD_ts-rtcservice PROD +- tag: ts-rtcservice +- mzId: CD_ts-rtcservice/management-zone/CDts-rtcservice.id +- env: PROD +- skipDeployment: "false" +CDts-rtcservice-PROD.NA-Prod: +- name: CD_ts-rtcservice PROD +- tag: ts-rtcservice +- mzId: CD_ts-rtcservice/management-zone/CDts-rtcservice.id +- env: PROD +- skipDeployment: "false" +CDts-rtcservice-PROD.CN-Prod: +- name: CD_ts-rtcservice PROD +- tag: ts-rtcservice +- mzId: CD_ts-rtcservice/management-zone/CDts-rtcservice.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-rtcservice-INT: +- name: CD_ts-rtcservice INT +- tag: ts-rtcservice +- mzId: CD_ts-rtcservice/management-zone/CDts-rtcservice.id +- env: INT +- skipDeployment: "true" +#Configuration +CDts-rtcservice-INT.EMEA-PreProd: +- name: CD_ts-rtcservice INT +- tag: ts-rtcservice +- mzId: CD_ts-rtcservice/management-zone/CDts-rtcservice.id +- env: INT +- skipDeployment: "false" +CDts-rtcservice-INT.NA-PreProd: +- name: CD_ts-rtcservice INT +- tag: ts-rtcservice +- mzId: CD_ts-rtcservice/management-zone/CDts-rtcservice.id +- env: INT +- skipDeployment: "false" +CDts-rtcservice-INT.CN-PreProd: +- name: CD_ts-rtcservice INT +- tag: ts-rtcservice +- mzId: CD_ts-rtcservice/management-zone/CDts-rtcservice.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcservice/alerting-profile/default.json b/BMW-Dynatrace-config/CD_ts-rtcservice/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcservice/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcservice/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_ts-rtcservice/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcservice/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcservice/custom-service-java/README.md b/BMW-Dynatrace-config/CD_ts-rtcservice/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcservice/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcservice/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_ts-rtcservice/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcservice/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcservice/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_ts-rtcservice/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcservice/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcservice/dashboard/README.md b/BMW-Dynatrace-config/CD_ts-rtcservice/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcservice/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcservice/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_ts-rtcservice/dashboard/dashboard.yaml new file mode 100644 index 00000000..e58185be --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcservice/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDts-rtcservice-PROD-E2E: defaultPRODE2E.json +- CDts-rtcservice-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDts-rtcservice-PROD-E2E: +- name: CD_ts-rtcservice PROD-E2E +- mzName: CD_ts-rtcservice/management-zone/CDts-rtcservice.name +- mzId: CD_ts-rtcservice/management-zone/CDts-rtcservice.id +- skipDeployment: "true" +#Configuration +CDts-rtcservice-PROD-E2E.EMEA-Prod: +- name: CD_ts-rtcservice PROD-E2E +- mzName: CD_ts-rtcservice/management-zone/CDts-rtcservice.name +- mzId: CD_ts-rtcservice/management-zone/CDts-rtcservice.id +- tag: ts-rtcservice +- skipDeployment: "false" +CDts-rtcservice-PROD-E2E.NA-Prod: +- name: CD_ts-rtcservice PROD-E2E +- mzName: CD_ts-rtcservice/management-zone/CDts-rtcservice.name +- mzId: CD_ts-rtcservice/management-zone/CDts-rtcservice.id +- tag: ts-rtcservice +- skipDeployment: "false" +CDts-rtcservice-PROD-E2E.CN-Prod: +- name: CD_ts-rtcservice PROD-E2E +- mzName: CD_ts-rtcservice/management-zone/CDts-rtcservice.name +- mzId: CD_ts-rtcservice/management-zone/CDts-rtcservice.id +- tag: ts-rtcservice +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDts-rtcservice-INT-TEST: +- name: CD_ts-rtcservice INT-TEST +- mzName: CD_ts-rtcservice/management-zone/CDts-rtcservice.name +- mzId: CD_ts-rtcservice/management-zone/CDts-rtcservice.id +- tag: ts-rtcservice +- skipDeployment: "true" +#Configuration +CDts-rtcservice-INT-TEST.EMEA-PreProd: +- name: CD_ts-rtcservice INT-TEST +- mzName: CD_ts-rtcservice/management-zone/CDts-rtcservice.name +- mzId: CD_ts-rtcservice/management-zone/CDts-rtcservice.id +- tag: ts-rtcservice +- skipDeployment: "false" +CDts-rtcservice-INT-TEST.NA-PreProd: +- name: CD_ts-rtcservice INT-TEST +- mzName: CD_ts-rtcservice/management-zone/CDts-rtcservice.name +- mzId: CD_ts-rtcservice/management-zone/CDts-rtcservice.id +- env: INT +- skipDeployment: "false" +CDts-rtcservice-INT-TEST.CN-PreProd: +- name: CD_ts-rtcservice INT-TEST +- mzName: CD_ts-rtcservice/management-zone/CDts-rtcservice.name +- mzId: CD_ts-rtcservice/management-zone/CDts-rtcservice.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcservice/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_ts-rtcservice/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcservice/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcservice/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_ts-rtcservice/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcservice/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcservice/management-zone/README.md b/BMW-Dynatrace-config/CD_ts-rtcservice/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcservice/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_ts-rtcservice/management-zone/default.json b/BMW-Dynatrace-config/CD_ts-rtcservice/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcservice/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcservice/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_ts-rtcservice/management-zone/management-zone.yaml new file mode 100644 index 00000000..5f8108f9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcservice/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDts-rtcservice: default.json + +CDts-rtcservice: +- name: CD_ts-rtcservice +- tag: ts-rtcservice diff --git a/BMW-Dynatrace-config/CD_ts-rtcservice/notification/README.md b/BMW-Dynatrace-config/CD_ts-rtcservice/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcservice/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcservice/notification/email.json b/BMW-Dynatrace-config/CD_ts-rtcservice/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcservice/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcservice/notification/msTeams.json b/BMW-Dynatrace-config/CD_ts-rtcservice/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcservice/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcservice/notification/notification.yaml b/BMW-Dynatrace-config/CD_ts-rtcservice/notification/notification.yaml new file mode 100644 index 00000000..b608d0d8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcservice/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDts-rtcservice-PROD: msTeams.json +- CDts-rtcservice-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-rtcservice-PROD: +- name: CD_ts-rtcservice PROD +- alertingProfile: CD_ts-rtcservice/alerting-profile/CDts-rtcservice-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-rtcservice-PROD.EMEA-Prod: +- name: CD_ts-rtcservice PROD +- alertingProfile: CD_ts-rtcservice/alerting-profile/CDts-rtcservice-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-rtcservice-PROD.NA-Prod: +- name: CD_ts-rtcservice PROD +- alertingProfile: CD_ts-rtcservice/alerting-profile/CDts-rtcservice-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-rtcservice-PROD.CN-Prod: +- name: CD_ts-rtcservice PROD +- alertingProfile: CD_ts-rtcservice/alerting-profile/CDts-rtcservice-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-rtcservice-INT: +- name: CD_ts-rtcservice INT +- alertingProfile: CD_ts-rtcservice/alerting-profile/CDts-rtcservice-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-rtcservice-INT.EMEA-PreProd: +- name: CD_ts-rtcservice INT +- alertingProfile: CD_ts-rtcservice/alerting-profile/CDts-rtcservice-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-rtcservice-INT.NA-PreProd: +- name: CD_ts-rtcservice INT +- alertingProfile: CD_ts-rtcservice/alerting-profile/CDts-rtcservice-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-rtcservice-INT.CN-PreProd: +- name: CD_ts-rtcservice INT +- alertingProfile: CD_ts-rtcservice/alerting-profile/CDts-rtcservice-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcservice/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_ts-rtcservice/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcservice/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcservice/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_ts-rtcservice/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcservice/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcservice/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_ts-rtcservice/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..8f0ed664 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcservice/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- ts-rtcservice: default.json + +ts-rtcservice: +- name: CD_ts-rtcservice - +- mzName: CD_ts-rtcservice/management-zone/CDts-rtcservice.name +- mzId: CD_ts-rtcservice/management-zone/CDts-rtcservice.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-scallservice/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_ts-scallservice/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..576d6ea7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-scallservice/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDts-scallservice-PROD: default.json +- CDts-scallservice-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-scallservice-PROD: +- name: CD_ts-scallservice PROD +- tag: ts-scallservice +- mzId: CD_ts-scallservice/management-zone/CDts-scallservice.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDts-scallservice-PROD.EMEA-Prod: +- name: CD_ts-scallservice PROD +- tag: ts-scallservice +- mzId: CD_ts-scallservice/management-zone/CDts-scallservice.id +- env: PROD +- skipDeployment: "false" +CDts-scallservice-PROD.NA-Prod: +- name: CD_ts-scallservice PROD +- tag: ts-scallservice +- mzId: CD_ts-scallservice/management-zone/CDts-scallservice.id +- env: PROD +- skipDeployment: "false" +CDts-scallservice-PROD.CN-Prod: +- name: CD_ts-scallservice PROD +- tag: ts-scallservice +- mzId: CD_ts-scallservice/management-zone/CDts-scallservice.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-scallservice-INT: +- name: CD_ts-scallservice INT +- tag: ts-scallservice +- mzId: CD_ts-scallservice/management-zone/CDts-scallservice.id +- env: INT +- skipDeployment: "true" +#Configuration +CDts-scallservice-INT.EMEA-PreProd: +- name: CD_ts-scallservice INT +- tag: ts-scallservice +- mzId: CD_ts-scallservice/management-zone/CDts-scallservice.id +- env: INT +- skipDeployment: "false" +CDts-scallservice-INT.NA-PreProd: +- name: CD_ts-scallservice INT +- tag: ts-scallservice +- mzId: CD_ts-scallservice/management-zone/CDts-scallservice.id +- env: INT +- skipDeployment: "false" +CDts-scallservice-INT.CN-PreProd: +- name: CD_ts-scallservice INT +- tag: ts-scallservice +- mzId: CD_ts-scallservice/management-zone/CDts-scallservice.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-scallservice/alerting-profile/default.json b/BMW-Dynatrace-config/CD_ts-scallservice/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-scallservice/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-scallservice/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_ts-scallservice/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-scallservice/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-scallservice/custom-service-java/README.md b/BMW-Dynatrace-config/CD_ts-scallservice/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-scallservice/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-scallservice/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_ts-scallservice/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-scallservice/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-scallservice/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_ts-scallservice/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-scallservice/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-scallservice/dashboard/README.md b/BMW-Dynatrace-config/CD_ts-scallservice/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-scallservice/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-scallservice/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_ts-scallservice/dashboard/dashboard.yaml new file mode 100644 index 00000000..6a109cb1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-scallservice/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDts-scallservice-PROD-E2E: defaultPRODE2E.json +- CDts-scallservice-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDts-scallservice-PROD-E2E: +- name: CD_ts-scallservice PROD-E2E +- mzName: CD_ts-scallservice/management-zone/CDts-scallservice.name +- mzId: CD_ts-scallservice/management-zone/CDts-scallservice.id +- skipDeployment: "true" +#Configuration +CDts-scallservice-PROD-E2E.EMEA-Prod: +- name: CD_ts-scallservice PROD-E2E +- mzName: CD_ts-scallservice/management-zone/CDts-scallservice.name +- mzId: CD_ts-scallservice/management-zone/CDts-scallservice.id +- tag: ts-scallservice +- skipDeployment: "false" +CDts-scallservice-PROD-E2E.NA-Prod: +- name: CD_ts-scallservice PROD-E2E +- mzName: CD_ts-scallservice/management-zone/CDts-scallservice.name +- mzId: CD_ts-scallservice/management-zone/CDts-scallservice.id +- tag: ts-scallservice +- skipDeployment: "false" +CDts-scallservice-PROD-E2E.CN-Prod: +- name: CD_ts-scallservice PROD-E2E +- mzName: CD_ts-scallservice/management-zone/CDts-scallservice.name +- mzId: CD_ts-scallservice/management-zone/CDts-scallservice.id +- tag: ts-scallservice +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDts-scallservice-INT-TEST: +- name: CD_ts-scallservice INT-TEST +- mzName: CD_ts-scallservice/management-zone/CDts-scallservice.name +- mzId: CD_ts-scallservice/management-zone/CDts-scallservice.id +- tag: ts-scallservice +- skipDeployment: "true" +#Configuration +CDts-scallservice-INT-TEST.EMEA-PreProd: +- name: CD_ts-scallservice INT-TEST +- mzName: CD_ts-scallservice/management-zone/CDts-scallservice.name +- mzId: CD_ts-scallservice/management-zone/CDts-scallservice.id +- tag: ts-scallservice +- skipDeployment: "false" +CDts-scallservice-INT-TEST.NA-PreProd: +- name: CD_ts-scallservice INT-TEST +- mzName: CD_ts-scallservice/management-zone/CDts-scallservice.name +- mzId: CD_ts-scallservice/management-zone/CDts-scallservice.id +- env: INT +- skipDeployment: "false" +CDts-scallservice-INT-TEST.CN-PreProd: +- name: CD_ts-scallservice INT-TEST +- mzName: CD_ts-scallservice/management-zone/CDts-scallservice.name +- mzId: CD_ts-scallservice/management-zone/CDts-scallservice.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-scallservice/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_ts-scallservice/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-scallservice/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-scallservice/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_ts-scallservice/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-scallservice/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-scallservice/management-zone/README.md b/BMW-Dynatrace-config/CD_ts-scallservice/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-scallservice/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_ts-scallservice/management-zone/default.json b/BMW-Dynatrace-config/CD_ts-scallservice/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-scallservice/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-scallservice/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_ts-scallservice/management-zone/management-zone.yaml new file mode 100644 index 00000000..9c920630 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-scallservice/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDts-scallservice: default.json + +CDts-scallservice: +- name: CD_ts-scallservice +- tag: ts-scallservice diff --git a/BMW-Dynatrace-config/CD_ts-scallservice/notification/README.md b/BMW-Dynatrace-config/CD_ts-scallservice/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-scallservice/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-scallservice/notification/email.json b/BMW-Dynatrace-config/CD_ts-scallservice/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-scallservice/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-scallservice/notification/msTeams.json b/BMW-Dynatrace-config/CD_ts-scallservice/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-scallservice/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-scallservice/notification/notification.yaml b/BMW-Dynatrace-config/CD_ts-scallservice/notification/notification.yaml new file mode 100644 index 00000000..8f4bc573 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-scallservice/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDts-scallservice-PROD: msTeams.json +- CDts-scallservice-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-scallservice-PROD: +- name: CD_ts-scallservice PROD +- alertingProfile: CD_ts-scallservice/alerting-profile/CDts-scallservice-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-scallservice-PROD.EMEA-Prod: +- name: CD_ts-scallservice PROD +- alertingProfile: CD_ts-scallservice/alerting-profile/CDts-scallservice-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-scallservice-PROD.NA-Prod: +- name: CD_ts-scallservice PROD +- alertingProfile: CD_ts-scallservice/alerting-profile/CDts-scallservice-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-scallservice-PROD.CN-Prod: +- name: CD_ts-scallservice PROD +- alertingProfile: CD_ts-scallservice/alerting-profile/CDts-scallservice-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-scallservice-INT: +- name: CD_ts-scallservice INT +- alertingProfile: CD_ts-scallservice/alerting-profile/CDts-scallservice-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-scallservice-INT.EMEA-PreProd: +- name: CD_ts-scallservice INT +- alertingProfile: CD_ts-scallservice/alerting-profile/CDts-scallservice-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-scallservice-INT.NA-PreProd: +- name: CD_ts-scallservice INT +- alertingProfile: CD_ts-scallservice/alerting-profile/CDts-scallservice-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-scallservice-INT.CN-PreProd: +- name: CD_ts-scallservice INT +- alertingProfile: CD_ts-scallservice/alerting-profile/CDts-scallservice-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-scallservice/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_ts-scallservice/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-scallservice/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-scallservice/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_ts-scallservice/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-scallservice/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-scallservice/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_ts-scallservice/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..28167f23 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-scallservice/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- ts-scallservice: default.json + +ts-scallservice: +- name: CD_ts-scallservice - +- mzName: CD_ts-scallservice/management-zone/CDts-scallservice.name +- mzId: CD_ts-scallservice/management-zone/CDts-scallservice.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgam/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_ts-tsbgam/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..2bf4e9e2 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgam/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDts-tsbgam-PROD: default.json +- CDts-tsbgam-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-tsbgam-PROD: +- name: CD_ts-tsbgam PROD +- tag: ts-tsbgam +- mzId: CD_ts-tsbgam/management-zone/CDts-tsbgam.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDts-tsbgam-PROD.EMEA-Prod: +- name: CD_ts-tsbgam PROD +- tag: ts-tsbgam +- mzId: CD_ts-tsbgam/management-zone/CDts-tsbgam.id +- env: PROD +- skipDeployment: "false" +CDts-tsbgam-PROD.NA-Prod: +- name: CD_ts-tsbgam PROD +- tag: ts-tsbgam +- mzId: CD_ts-tsbgam/management-zone/CDts-tsbgam.id +- env: PROD +- skipDeployment: "false" +CDts-tsbgam-PROD.CN-Prod: +- name: CD_ts-tsbgam PROD +- tag: ts-tsbgam +- mzId: CD_ts-tsbgam/management-zone/CDts-tsbgam.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-tsbgam-INT: +- name: CD_ts-tsbgam INT +- tag: ts-tsbgam +- mzId: CD_ts-tsbgam/management-zone/CDts-tsbgam.id +- env: INT +- skipDeployment: "true" +#Configuration +CDts-tsbgam-INT.EMEA-PreProd: +- name: CD_ts-tsbgam INT +- tag: ts-tsbgam +- mzId: CD_ts-tsbgam/management-zone/CDts-tsbgam.id +- env: INT +- skipDeployment: "false" +CDts-tsbgam-INT.NA-PreProd: +- name: CD_ts-tsbgam INT +- tag: ts-tsbgam +- mzId: CD_ts-tsbgam/management-zone/CDts-tsbgam.id +- env: INT +- skipDeployment: "false" +CDts-tsbgam-INT.CN-PreProd: +- name: CD_ts-tsbgam INT +- tag: ts-tsbgam +- mzId: CD_ts-tsbgam/management-zone/CDts-tsbgam.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgam/alerting-profile/default.json b/BMW-Dynatrace-config/CD_ts-tsbgam/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgam/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgam/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_ts-tsbgam/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgam/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgam/custom-service-java/README.md b/BMW-Dynatrace-config/CD_ts-tsbgam/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgam/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgam/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_ts-tsbgam/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgam/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgam/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_ts-tsbgam/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgam/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgam/dashboard/README.md b/BMW-Dynatrace-config/CD_ts-tsbgam/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgam/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgam/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_ts-tsbgam/dashboard/dashboard.yaml new file mode 100644 index 00000000..b974d9b0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgam/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDts-tsbgam-PROD-E2E: defaultPRODE2E.json +- CDts-tsbgam-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDts-tsbgam-PROD-E2E: +- name: CD_ts-tsbgam PROD-E2E +- mzName: CD_ts-tsbgam/management-zone/CDts-tsbgam.name +- mzId: CD_ts-tsbgam/management-zone/CDts-tsbgam.id +- skipDeployment: "true" +#Configuration +CDts-tsbgam-PROD-E2E.EMEA-Prod: +- name: CD_ts-tsbgam PROD-E2E +- mzName: CD_ts-tsbgam/management-zone/CDts-tsbgam.name +- mzId: CD_ts-tsbgam/management-zone/CDts-tsbgam.id +- tag: ts-tsbgam +- skipDeployment: "false" +CDts-tsbgam-PROD-E2E.NA-Prod: +- name: CD_ts-tsbgam PROD-E2E +- mzName: CD_ts-tsbgam/management-zone/CDts-tsbgam.name +- mzId: CD_ts-tsbgam/management-zone/CDts-tsbgam.id +- tag: ts-tsbgam +- skipDeployment: "false" +CDts-tsbgam-PROD-E2E.CN-Prod: +- name: CD_ts-tsbgam PROD-E2E +- mzName: CD_ts-tsbgam/management-zone/CDts-tsbgam.name +- mzId: CD_ts-tsbgam/management-zone/CDts-tsbgam.id +- tag: ts-tsbgam +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDts-tsbgam-INT-TEST: +- name: CD_ts-tsbgam INT-TEST +- mzName: CD_ts-tsbgam/management-zone/CDts-tsbgam.name +- mzId: CD_ts-tsbgam/management-zone/CDts-tsbgam.id +- tag: ts-tsbgam +- skipDeployment: "true" +#Configuration +CDts-tsbgam-INT-TEST.EMEA-PreProd: +- name: CD_ts-tsbgam INT-TEST +- mzName: CD_ts-tsbgam/management-zone/CDts-tsbgam.name +- mzId: CD_ts-tsbgam/management-zone/CDts-tsbgam.id +- tag: ts-tsbgam +- skipDeployment: "false" +CDts-tsbgam-INT-TEST.NA-PreProd: +- name: CD_ts-tsbgam INT-TEST +- mzName: CD_ts-tsbgam/management-zone/CDts-tsbgam.name +- mzId: CD_ts-tsbgam/management-zone/CDts-tsbgam.id +- env: INT +- skipDeployment: "false" +CDts-tsbgam-INT-TEST.CN-PreProd: +- name: CD_ts-tsbgam INT-TEST +- mzName: CD_ts-tsbgam/management-zone/CDts-tsbgam.name +- mzId: CD_ts-tsbgam/management-zone/CDts-tsbgam.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgam/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_ts-tsbgam/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgam/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgam/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_ts-tsbgam/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgam/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgam/management-zone/README.md b/BMW-Dynatrace-config/CD_ts-tsbgam/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgam/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_ts-tsbgam/management-zone/default.json b/BMW-Dynatrace-config/CD_ts-tsbgam/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgam/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgam/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_ts-tsbgam/management-zone/management-zone.yaml new file mode 100644 index 00000000..7b167ca4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgam/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDts-tsbgam: default.json + +CDts-tsbgam: +- name: CD_ts-tsbgam +- tag: ts-tsbgam diff --git a/BMW-Dynatrace-config/CD_ts-tsbgam/notification/README.md b/BMW-Dynatrace-config/CD_ts-tsbgam/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgam/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgam/notification/email.json b/BMW-Dynatrace-config/CD_ts-tsbgam/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgam/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgam/notification/msTeams.json b/BMW-Dynatrace-config/CD_ts-tsbgam/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgam/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgam/notification/notification.yaml b/BMW-Dynatrace-config/CD_ts-tsbgam/notification/notification.yaml new file mode 100644 index 00000000..c5588368 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgam/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDts-tsbgam-PROD: msTeams.json +- CDts-tsbgam-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-tsbgam-PROD: +- name: CD_ts-tsbgam PROD +- alertingProfile: CD_ts-tsbgam/alerting-profile/CDts-tsbgam-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-tsbgam-PROD.EMEA-Prod: +- name: CD_ts-tsbgam PROD +- alertingProfile: CD_ts-tsbgam/alerting-profile/CDts-tsbgam-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-tsbgam-PROD.NA-Prod: +- name: CD_ts-tsbgam PROD +- alertingProfile: CD_ts-tsbgam/alerting-profile/CDts-tsbgam-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-tsbgam-PROD.CN-Prod: +- name: CD_ts-tsbgam PROD +- alertingProfile: CD_ts-tsbgam/alerting-profile/CDts-tsbgam-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-tsbgam-INT: +- name: CD_ts-tsbgam INT +- alertingProfile: CD_ts-tsbgam/alerting-profile/CDts-tsbgam-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-tsbgam-INT.EMEA-PreProd: +- name: CD_ts-tsbgam INT +- alertingProfile: CD_ts-tsbgam/alerting-profile/CDts-tsbgam-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-tsbgam-INT.NA-PreProd: +- name: CD_ts-tsbgam INT +- alertingProfile: CD_ts-tsbgam/alerting-profile/CDts-tsbgam-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-tsbgam-INT.CN-PreProd: +- name: CD_ts-tsbgam INT +- alertingProfile: CD_ts-tsbgam/alerting-profile/CDts-tsbgam-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgam/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_ts-tsbgam/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgam/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgam/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_ts-tsbgam/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgam/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgam/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_ts-tsbgam/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..ed87fd18 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgam/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- ts-tsbgam: default.json + +ts-tsbgam: +- name: CD_ts-tsbgam - +- mzName: CD_ts-tsbgam/management-zone/CDts-tsbgam.name +- mzId: CD_ts-tsbgam/management-zone/CDts-tsbgam.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgservice/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_ts-tsbgservice/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..83c3dc29 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgservice/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDts-tsbgservice-PROD: default.json +- CDts-tsbgservice-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-tsbgservice-PROD: +- name: CD_ts-tsbgservice PROD +- tag: ts-tsbgservice +- mzId: CD_ts-tsbgservice/management-zone/CDts-tsbgservice.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDts-tsbgservice-PROD.EMEA-Prod: +- name: CD_ts-tsbgservice PROD +- tag: ts-tsbgservice +- mzId: CD_ts-tsbgservice/management-zone/CDts-tsbgservice.id +- env: PROD +- skipDeployment: "false" +CDts-tsbgservice-PROD.NA-Prod: +- name: CD_ts-tsbgservice PROD +- tag: ts-tsbgservice +- mzId: CD_ts-tsbgservice/management-zone/CDts-tsbgservice.id +- env: PROD +- skipDeployment: "false" +CDts-tsbgservice-PROD.CN-Prod: +- name: CD_ts-tsbgservice PROD +- tag: ts-tsbgservice +- mzId: CD_ts-tsbgservice/management-zone/CDts-tsbgservice.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-tsbgservice-INT: +- name: CD_ts-tsbgservice INT +- tag: ts-tsbgservice +- mzId: CD_ts-tsbgservice/management-zone/CDts-tsbgservice.id +- env: INT +- skipDeployment: "true" +#Configuration +CDts-tsbgservice-INT.EMEA-PreProd: +- name: CD_ts-tsbgservice INT +- tag: ts-tsbgservice +- mzId: CD_ts-tsbgservice/management-zone/CDts-tsbgservice.id +- env: INT +- skipDeployment: "false" +CDts-tsbgservice-INT.NA-PreProd: +- name: CD_ts-tsbgservice INT +- tag: ts-tsbgservice +- mzId: CD_ts-tsbgservice/management-zone/CDts-tsbgservice.id +- env: INT +- skipDeployment: "false" +CDts-tsbgservice-INT.CN-PreProd: +- name: CD_ts-tsbgservice INT +- tag: ts-tsbgservice +- mzId: CD_ts-tsbgservice/management-zone/CDts-tsbgservice.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgservice/alerting-profile/default.json b/BMW-Dynatrace-config/CD_ts-tsbgservice/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgservice/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgservice/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_ts-tsbgservice/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgservice/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgservice/custom-service-java/README.md b/BMW-Dynatrace-config/CD_ts-tsbgservice/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgservice/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgservice/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_ts-tsbgservice/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgservice/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgservice/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_ts-tsbgservice/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgservice/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgservice/dashboard/README.md b/BMW-Dynatrace-config/CD_ts-tsbgservice/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgservice/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgservice/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_ts-tsbgservice/dashboard/dashboard.yaml new file mode 100644 index 00000000..c71754ce --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgservice/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDts-tsbgservice-PROD-E2E: defaultPRODE2E.json +- CDts-tsbgservice-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDts-tsbgservice-PROD-E2E: +- name: CD_ts-tsbgservice PROD-E2E +- mzName: CD_ts-tsbgservice/management-zone/CDts-tsbgservice.name +- mzId: CD_ts-tsbgservice/management-zone/CDts-tsbgservice.id +- skipDeployment: "true" +#Configuration +CDts-tsbgservice-PROD-E2E.EMEA-Prod: +- name: CD_ts-tsbgservice PROD-E2E +- mzName: CD_ts-tsbgservice/management-zone/CDts-tsbgservice.name +- mzId: CD_ts-tsbgservice/management-zone/CDts-tsbgservice.id +- tag: ts-tsbgservice +- skipDeployment: "false" +CDts-tsbgservice-PROD-E2E.NA-Prod: +- name: CD_ts-tsbgservice PROD-E2E +- mzName: CD_ts-tsbgservice/management-zone/CDts-tsbgservice.name +- mzId: CD_ts-tsbgservice/management-zone/CDts-tsbgservice.id +- tag: ts-tsbgservice +- skipDeployment: "false" +CDts-tsbgservice-PROD-E2E.CN-Prod: +- name: CD_ts-tsbgservice PROD-E2E +- mzName: CD_ts-tsbgservice/management-zone/CDts-tsbgservice.name +- mzId: CD_ts-tsbgservice/management-zone/CDts-tsbgservice.id +- tag: ts-tsbgservice +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDts-tsbgservice-INT-TEST: +- name: CD_ts-tsbgservice INT-TEST +- mzName: CD_ts-tsbgservice/management-zone/CDts-tsbgservice.name +- mzId: CD_ts-tsbgservice/management-zone/CDts-tsbgservice.id +- tag: ts-tsbgservice +- skipDeployment: "true" +#Configuration +CDts-tsbgservice-INT-TEST.EMEA-PreProd: +- name: CD_ts-tsbgservice INT-TEST +- mzName: CD_ts-tsbgservice/management-zone/CDts-tsbgservice.name +- mzId: CD_ts-tsbgservice/management-zone/CDts-tsbgservice.id +- tag: ts-tsbgservice +- skipDeployment: "false" +CDts-tsbgservice-INT-TEST.NA-PreProd: +- name: CD_ts-tsbgservice INT-TEST +- mzName: CD_ts-tsbgservice/management-zone/CDts-tsbgservice.name +- mzId: CD_ts-tsbgservice/management-zone/CDts-tsbgservice.id +- env: INT +- skipDeployment: "false" +CDts-tsbgservice-INT-TEST.CN-PreProd: +- name: CD_ts-tsbgservice INT-TEST +- mzName: CD_ts-tsbgservice/management-zone/CDts-tsbgservice.name +- mzId: CD_ts-tsbgservice/management-zone/CDts-tsbgservice.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgservice/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_ts-tsbgservice/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgservice/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgservice/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_ts-tsbgservice/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgservice/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgservice/management-zone/README.md b/BMW-Dynatrace-config/CD_ts-tsbgservice/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgservice/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_ts-tsbgservice/management-zone/default.json b/BMW-Dynatrace-config/CD_ts-tsbgservice/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgservice/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgservice/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_ts-tsbgservice/management-zone/management-zone.yaml new file mode 100644 index 00000000..18ae373d --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgservice/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDts-tsbgservice: default.json + +CDts-tsbgservice: +- name: CD_ts-tsbgservice +- tag: ts-tsbgservice diff --git a/BMW-Dynatrace-config/CD_ts-tsbgservice/notification/README.md b/BMW-Dynatrace-config/CD_ts-tsbgservice/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgservice/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgservice/notification/email.json b/BMW-Dynatrace-config/CD_ts-tsbgservice/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgservice/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgservice/notification/msTeams.json b/BMW-Dynatrace-config/CD_ts-tsbgservice/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgservice/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgservice/notification/notification.yaml b/BMW-Dynatrace-config/CD_ts-tsbgservice/notification/notification.yaml new file mode 100644 index 00000000..42168942 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgservice/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDts-tsbgservice-PROD: msTeams.json +- CDts-tsbgservice-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-tsbgservice-PROD: +- name: CD_ts-tsbgservice PROD +- alertingProfile: CD_ts-tsbgservice/alerting-profile/CDts-tsbgservice-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-tsbgservice-PROD.EMEA-Prod: +- name: CD_ts-tsbgservice PROD +- alertingProfile: CD_ts-tsbgservice/alerting-profile/CDts-tsbgservice-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-tsbgservice-PROD.NA-Prod: +- name: CD_ts-tsbgservice PROD +- alertingProfile: CD_ts-tsbgservice/alerting-profile/CDts-tsbgservice-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-tsbgservice-PROD.CN-Prod: +- name: CD_ts-tsbgservice PROD +- alertingProfile: CD_ts-tsbgservice/alerting-profile/CDts-tsbgservice-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-tsbgservice-INT: +- name: CD_ts-tsbgservice INT +- alertingProfile: CD_ts-tsbgservice/alerting-profile/CDts-tsbgservice-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-tsbgservice-INT.EMEA-PreProd: +- name: CD_ts-tsbgservice INT +- alertingProfile: CD_ts-tsbgservice/alerting-profile/CDts-tsbgservice-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-tsbgservice-INT.NA-PreProd: +- name: CD_ts-tsbgservice INT +- alertingProfile: CD_ts-tsbgservice/alerting-profile/CDts-tsbgservice-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-tsbgservice-INT.CN-PreProd: +- name: CD_ts-tsbgservice INT +- alertingProfile: CD_ts-tsbgservice/alerting-profile/CDts-tsbgservice-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgservice/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_ts-tsbgservice/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgservice/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgservice/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_ts-tsbgservice/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgservice/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgservice/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_ts-tsbgservice/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..61114861 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgservice/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- ts-tsbgservice: default.json + +ts-tsbgservice: +- name: CD_ts-tsbgservice - +- mzName: CD_ts-tsbgservice/management-zone/CDts-tsbgservice.name +- mzId: CD_ts-tsbgservice/management-zone/CDts-tsbgservice.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsp/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_ts-tsp/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..98929ebc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsp/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDts-tsp-PROD: default.json +- CDts-tsp-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-tsp-PROD: +- name: CD_ts-tsp PROD +- tag: ts-tsp +- mzId: CD_ts-tsp/management-zone/CDts-tsp.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDts-tsp-PROD.EMEA-Prod: +- name: CD_ts-tsp PROD +- tag: ts-tsp +- mzId: CD_ts-tsp/management-zone/CDts-tsp.id +- env: PROD +- skipDeployment: "false" +CDts-tsp-PROD.NA-Prod: +- name: CD_ts-tsp PROD +- tag: ts-tsp +- mzId: CD_ts-tsp/management-zone/CDts-tsp.id +- env: PROD +- skipDeployment: "false" +CDts-tsp-PROD.CN-Prod: +- name: CD_ts-tsp PROD +- tag: ts-tsp +- mzId: CD_ts-tsp/management-zone/CDts-tsp.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-tsp-INT: +- name: CD_ts-tsp INT +- tag: ts-tsp +- mzId: CD_ts-tsp/management-zone/CDts-tsp.id +- env: INT +- skipDeployment: "true" +#Configuration +CDts-tsp-INT.EMEA-PreProd: +- name: CD_ts-tsp INT +- tag: ts-tsp +- mzId: CD_ts-tsp/management-zone/CDts-tsp.id +- env: INT +- skipDeployment: "false" +CDts-tsp-INT.NA-PreProd: +- name: CD_ts-tsp INT +- tag: ts-tsp +- mzId: CD_ts-tsp/management-zone/CDts-tsp.id +- env: INT +- skipDeployment: "false" +CDts-tsp-INT.CN-PreProd: +- name: CD_ts-tsp INT +- tag: ts-tsp +- mzId: CD_ts-tsp/management-zone/CDts-tsp.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsp/alerting-profile/default.json b/BMW-Dynatrace-config/CD_ts-tsp/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsp/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsp/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_ts-tsp/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsp/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsp/custom-service-java/README.md b/BMW-Dynatrace-config/CD_ts-tsp/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsp/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsp/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_ts-tsp/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsp/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsp/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_ts-tsp/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsp/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsp/dashboard/README.md b/BMW-Dynatrace-config/CD_ts-tsp/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsp/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsp/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_ts-tsp/dashboard/dashboard.yaml new file mode 100644 index 00000000..9db27281 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsp/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDts-tsp-PROD-E2E: defaultPRODE2E.json +- CDts-tsp-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDts-tsp-PROD-E2E: +- name: CD_ts-tsp PROD-E2E +- mzName: CD_ts-tsp/management-zone/CDts-tsp.name +- mzId: CD_ts-tsp/management-zone/CDts-tsp.id +- skipDeployment: "true" +#Configuration +CDts-tsp-PROD-E2E.EMEA-Prod: +- name: CD_ts-tsp PROD-E2E +- mzName: CD_ts-tsp/management-zone/CDts-tsp.name +- mzId: CD_ts-tsp/management-zone/CDts-tsp.id +- tag: ts-tsp +- skipDeployment: "false" +CDts-tsp-PROD-E2E.NA-Prod: +- name: CD_ts-tsp PROD-E2E +- mzName: CD_ts-tsp/management-zone/CDts-tsp.name +- mzId: CD_ts-tsp/management-zone/CDts-tsp.id +- tag: ts-tsp +- skipDeployment: "false" +CDts-tsp-PROD-E2E.CN-Prod: +- name: CD_ts-tsp PROD-E2E +- mzName: CD_ts-tsp/management-zone/CDts-tsp.name +- mzId: CD_ts-tsp/management-zone/CDts-tsp.id +- tag: ts-tsp +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDts-tsp-INT-TEST: +- name: CD_ts-tsp INT-TEST +- mzName: CD_ts-tsp/management-zone/CDts-tsp.name +- mzId: CD_ts-tsp/management-zone/CDts-tsp.id +- tag: ts-tsp +- skipDeployment: "true" +#Configuration +CDts-tsp-INT-TEST.EMEA-PreProd: +- name: CD_ts-tsp INT-TEST +- mzName: CD_ts-tsp/management-zone/CDts-tsp.name +- mzId: CD_ts-tsp/management-zone/CDts-tsp.id +- tag: ts-tsp +- skipDeployment: "false" +CDts-tsp-INT-TEST.NA-PreProd: +- name: CD_ts-tsp INT-TEST +- mzName: CD_ts-tsp/management-zone/CDts-tsp.name +- mzId: CD_ts-tsp/management-zone/CDts-tsp.id +- env: INT +- skipDeployment: "false" +CDts-tsp-INT-TEST.CN-PreProd: +- name: CD_ts-tsp INT-TEST +- mzName: CD_ts-tsp/management-zone/CDts-tsp.name +- mzId: CD_ts-tsp/management-zone/CDts-tsp.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsp/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_ts-tsp/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsp/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsp/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_ts-tsp/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsp/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsp/management-zone/README.md b/BMW-Dynatrace-config/CD_ts-tsp/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsp/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_ts-tsp/management-zone/default.json b/BMW-Dynatrace-config/CD_ts-tsp/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsp/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsp/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_ts-tsp/management-zone/management-zone.yaml new file mode 100644 index 00000000..241eb5a8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsp/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDts-tsp: default.json + +CDts-tsp: +- name: CD_ts-tsp +- tag: ts-tsp diff --git a/BMW-Dynatrace-config/CD_ts-tsp/notification/README.md b/BMW-Dynatrace-config/CD_ts-tsp/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsp/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsp/notification/email.json b/BMW-Dynatrace-config/CD_ts-tsp/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsp/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsp/notification/msTeams.json b/BMW-Dynatrace-config/CD_ts-tsp/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsp/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsp/notification/notification.yaml b/BMW-Dynatrace-config/CD_ts-tsp/notification/notification.yaml new file mode 100644 index 00000000..a3b92afa --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsp/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDts-tsp-PROD: msTeams.json +- CDts-tsp-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-tsp-PROD: +- name: CD_ts-tsp PROD +- alertingProfile: CD_ts-tsp/alerting-profile/CDts-tsp-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-tsp-PROD.EMEA-Prod: +- name: CD_ts-tsp PROD +- alertingProfile: CD_ts-tsp/alerting-profile/CDts-tsp-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-tsp-PROD.NA-Prod: +- name: CD_ts-tsp PROD +- alertingProfile: CD_ts-tsp/alerting-profile/CDts-tsp-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-tsp-PROD.CN-Prod: +- name: CD_ts-tsp PROD +- alertingProfile: CD_ts-tsp/alerting-profile/CDts-tsp-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-tsp-INT: +- name: CD_ts-tsp INT +- alertingProfile: CD_ts-tsp/alerting-profile/CDts-tsp-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-tsp-INT.EMEA-PreProd: +- name: CD_ts-tsp INT +- alertingProfile: CD_ts-tsp/alerting-profile/CDts-tsp-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-tsp-INT.NA-PreProd: +- name: CD_ts-tsp INT +- alertingProfile: CD_ts-tsp/alerting-profile/CDts-tsp-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-tsp-INT.CN-PreProd: +- name: CD_ts-tsp INT +- alertingProfile: CD_ts-tsp/alerting-profile/CDts-tsp-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsp/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_ts-tsp/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsp/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsp/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_ts-tsp/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsp/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsp/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_ts-tsp/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..90a7fd51 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsp/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- ts-tsp: default.json + +ts-tsp: +- name: CD_ts-tsp - +- mzName: CD_ts-tsp/management-zone/CDts-tsp.name +- mzId: CD_ts-tsp/management-zone/CDts-tsp.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-wlupdater/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_ts-wlupdater/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..3feb8d4e --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-wlupdater/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDts-wlupdater-PROD: default.json +- CDts-wlupdater-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-wlupdater-PROD: +- name: CD_ts-wlupdater PROD +- tag: ts-wlupdater +- mzId: CD_ts-wlupdater/management-zone/CDts-wlupdater.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDts-wlupdater-PROD.EMEA-Prod: +- name: CD_ts-wlupdater PROD +- tag: ts-wlupdater +- mzId: CD_ts-wlupdater/management-zone/CDts-wlupdater.id +- env: PROD +- skipDeployment: "false" +CDts-wlupdater-PROD.NA-Prod: +- name: CD_ts-wlupdater PROD +- tag: ts-wlupdater +- mzId: CD_ts-wlupdater/management-zone/CDts-wlupdater.id +- env: PROD +- skipDeployment: "false" +CDts-wlupdater-PROD.CN-Prod: +- name: CD_ts-wlupdater PROD +- tag: ts-wlupdater +- mzId: CD_ts-wlupdater/management-zone/CDts-wlupdater.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-wlupdater-INT: +- name: CD_ts-wlupdater INT +- tag: ts-wlupdater +- mzId: CD_ts-wlupdater/management-zone/CDts-wlupdater.id +- env: INT +- skipDeployment: "true" +#Configuration +CDts-wlupdater-INT.EMEA-PreProd: +- name: CD_ts-wlupdater INT +- tag: ts-wlupdater +- mzId: CD_ts-wlupdater/management-zone/CDts-wlupdater.id +- env: INT +- skipDeployment: "false" +CDts-wlupdater-INT.NA-PreProd: +- name: CD_ts-wlupdater INT +- tag: ts-wlupdater +- mzId: CD_ts-wlupdater/management-zone/CDts-wlupdater.id +- env: INT +- skipDeployment: "false" +CDts-wlupdater-INT.CN-PreProd: +- name: CD_ts-wlupdater INT +- tag: ts-wlupdater +- mzId: CD_ts-wlupdater/management-zone/CDts-wlupdater.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-wlupdater/alerting-profile/default.json b/BMW-Dynatrace-config/CD_ts-wlupdater/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-wlupdater/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-wlupdater/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_ts-wlupdater/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-wlupdater/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-wlupdater/custom-service-java/README.md b/BMW-Dynatrace-config/CD_ts-wlupdater/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-wlupdater/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-wlupdater/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_ts-wlupdater/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-wlupdater/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-wlupdater/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_ts-wlupdater/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-wlupdater/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-wlupdater/dashboard/README.md b/BMW-Dynatrace-config/CD_ts-wlupdater/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-wlupdater/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-wlupdater/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_ts-wlupdater/dashboard/dashboard.yaml new file mode 100644 index 00000000..74d2aecd --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-wlupdater/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDts-wlupdater-PROD-E2E: defaultPRODE2E.json +- CDts-wlupdater-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDts-wlupdater-PROD-E2E: +- name: CD_ts-wlupdater PROD-E2E +- mzName: CD_ts-wlupdater/management-zone/CDts-wlupdater.name +- mzId: CD_ts-wlupdater/management-zone/CDts-wlupdater.id +- skipDeployment: "true" +#Configuration +CDts-wlupdater-PROD-E2E.EMEA-Prod: +- name: CD_ts-wlupdater PROD-E2E +- mzName: CD_ts-wlupdater/management-zone/CDts-wlupdater.name +- mzId: CD_ts-wlupdater/management-zone/CDts-wlupdater.id +- tag: ts-wlupdater +- skipDeployment: "false" +CDts-wlupdater-PROD-E2E.NA-Prod: +- name: CD_ts-wlupdater PROD-E2E +- mzName: CD_ts-wlupdater/management-zone/CDts-wlupdater.name +- mzId: CD_ts-wlupdater/management-zone/CDts-wlupdater.id +- tag: ts-wlupdater +- skipDeployment: "false" +CDts-wlupdater-PROD-E2E.CN-Prod: +- name: CD_ts-wlupdater PROD-E2E +- mzName: CD_ts-wlupdater/management-zone/CDts-wlupdater.name +- mzId: CD_ts-wlupdater/management-zone/CDts-wlupdater.id +- tag: ts-wlupdater +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDts-wlupdater-INT-TEST: +- name: CD_ts-wlupdater INT-TEST +- mzName: CD_ts-wlupdater/management-zone/CDts-wlupdater.name +- mzId: CD_ts-wlupdater/management-zone/CDts-wlupdater.id +- tag: ts-wlupdater +- skipDeployment: "true" +#Configuration +CDts-wlupdater-INT-TEST.EMEA-PreProd: +- name: CD_ts-wlupdater INT-TEST +- mzName: CD_ts-wlupdater/management-zone/CDts-wlupdater.name +- mzId: CD_ts-wlupdater/management-zone/CDts-wlupdater.id +- tag: ts-wlupdater +- skipDeployment: "false" +CDts-wlupdater-INT-TEST.NA-PreProd: +- name: CD_ts-wlupdater INT-TEST +- mzName: CD_ts-wlupdater/management-zone/CDts-wlupdater.name +- mzId: CD_ts-wlupdater/management-zone/CDts-wlupdater.id +- env: INT +- skipDeployment: "false" +CDts-wlupdater-INT-TEST.CN-PreProd: +- name: CD_ts-wlupdater INT-TEST +- mzName: CD_ts-wlupdater/management-zone/CDts-wlupdater.name +- mzId: CD_ts-wlupdater/management-zone/CDts-wlupdater.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-wlupdater/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_ts-wlupdater/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-wlupdater/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-wlupdater/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_ts-wlupdater/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-wlupdater/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-wlupdater/management-zone/README.md b/BMW-Dynatrace-config/CD_ts-wlupdater/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-wlupdater/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_ts-wlupdater/management-zone/default.json b/BMW-Dynatrace-config/CD_ts-wlupdater/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-wlupdater/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-wlupdater/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_ts-wlupdater/management-zone/management-zone.yaml new file mode 100644 index 00000000..77f6174a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-wlupdater/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDts-wlupdater: default.json + +CDts-wlupdater: +- name: CD_ts-wlupdater +- tag: ts-wlupdater diff --git a/BMW-Dynatrace-config/CD_ts-wlupdater/notification/README.md b/BMW-Dynatrace-config/CD_ts-wlupdater/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-wlupdater/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-wlupdater/notification/email.json b/BMW-Dynatrace-config/CD_ts-wlupdater/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-wlupdater/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-wlupdater/notification/msTeams.json b/BMW-Dynatrace-config/CD_ts-wlupdater/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-wlupdater/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-wlupdater/notification/notification.yaml b/BMW-Dynatrace-config/CD_ts-wlupdater/notification/notification.yaml new file mode 100644 index 00000000..87c3a8db --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-wlupdater/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDts-wlupdater-PROD: msTeams.json +- CDts-wlupdater-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-wlupdater-PROD: +- name: CD_ts-wlupdater PROD +- alertingProfile: CD_ts-wlupdater/alerting-profile/CDts-wlupdater-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-wlupdater-PROD.EMEA-Prod: +- name: CD_ts-wlupdater PROD +- alertingProfile: CD_ts-wlupdater/alerting-profile/CDts-wlupdater-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-wlupdater-PROD.NA-Prod: +- name: CD_ts-wlupdater PROD +- alertingProfile: CD_ts-wlupdater/alerting-profile/CDts-wlupdater-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDts-wlupdater-PROD.CN-Prod: +- name: CD_ts-wlupdater PROD +- alertingProfile: CD_ts-wlupdater/alerting-profile/CDts-wlupdater-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDts-wlupdater-INT: +- name: CD_ts-wlupdater INT +- alertingProfile: CD_ts-wlupdater/alerting-profile/CDts-wlupdater-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDts-wlupdater-INT.EMEA-PreProd: +- name: CD_ts-wlupdater INT +- alertingProfile: CD_ts-wlupdater/alerting-profile/CDts-wlupdater-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-wlupdater-INT.NA-PreProd: +- name: CD_ts-wlupdater INT +- alertingProfile: CD_ts-wlupdater/alerting-profile/CDts-wlupdater-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDts-wlupdater-INT.CN-PreProd: +- name: CD_ts-wlupdater INT +- alertingProfile: CD_ts-wlupdater/alerting-profile/CDts-wlupdater-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-wlupdater/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_ts-wlupdater/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-wlupdater/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-wlupdater/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_ts-wlupdater/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-wlupdater/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-wlupdater/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_ts-wlupdater/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..39537ca8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-wlupdater/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- ts-wlupdater: default.json + +ts-wlupdater: +- name: CD_ts-wlupdater - +- mzName: CD_ts-wlupdater/management-zone/CDts-wlupdater.name +- mzId: CD_ts-wlupdater/management-zone/CDts-wlupdater.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tscs/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_tscs/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..0074940c --- /dev/null +++ b/BMW-Dynatrace-config/CD_tscs/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDtscs-PROD: default.json +- CDtscs-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDtscs-PROD: +- name: CD_tscs PROD +- tag: tscs +- mzId: CD_tscs/management-zone/CDtscs.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDtscs-PROD.EMEA-Prod: +- name: CD_tscs PROD +- tag: tscs +- mzId: CD_tscs/management-zone/CDtscs.id +- env: PROD +- skipDeployment: "false" +CDtscs-PROD.NA-Prod: +- name: CD_tscs PROD +- tag: tscs +- mzId: CD_tscs/management-zone/CDtscs.id +- env: PROD +- skipDeployment: "false" +CDtscs-PROD.CN-Prod: +- name: CD_tscs PROD +- tag: tscs +- mzId: CD_tscs/management-zone/CDtscs.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDtscs-INT: +- name: CD_tscs INT +- tag: tscs +- mzId: CD_tscs/management-zone/CDtscs.id +- env: INT +- skipDeployment: "true" +#Configuration +CDtscs-INT.EMEA-PreProd: +- name: CD_tscs INT +- tag: tscs +- mzId: CD_tscs/management-zone/CDtscs.id +- env: INT +- skipDeployment: "false" +CDtscs-INT.NA-PreProd: +- name: CD_tscs INT +- tag: tscs +- mzId: CD_tscs/management-zone/CDtscs.id +- env: INT +- skipDeployment: "false" +CDtscs-INT.CN-PreProd: +- name: CD_tscs INT +- tag: tscs +- mzId: CD_tscs/management-zone/CDtscs.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tscs/alerting-profile/default.json b/BMW-Dynatrace-config/CD_tscs/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tscs/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tscs/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_tscs/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_tscs/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tscs/custom-service-java/README.md b/BMW-Dynatrace-config/CD_tscs/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tscs/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tscs/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_tscs/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tscs/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tscs/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_tscs/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tscs/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tscs/dashboard/README.md b/BMW-Dynatrace-config/CD_tscs/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_tscs/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tscs/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_tscs/dashboard/dashboard.yaml new file mode 100644 index 00000000..51e25135 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tscs/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDtscs-PROD-E2E: defaultPRODE2E.json +- CDtscs-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDtscs-PROD-E2E: +- name: CD_tscs PROD-E2E +- mzName: CD_tscs/management-zone/CDtscs.name +- mzId: CD_tscs/management-zone/CDtscs.id +- skipDeployment: "true" +#Configuration +CDtscs-PROD-E2E.EMEA-Prod: +- name: CD_tscs PROD-E2E +- mzName: CD_tscs/management-zone/CDtscs.name +- mzId: CD_tscs/management-zone/CDtscs.id +- tag: tscs +- skipDeployment: "false" +CDtscs-PROD-E2E.NA-Prod: +- name: CD_tscs PROD-E2E +- mzName: CD_tscs/management-zone/CDtscs.name +- mzId: CD_tscs/management-zone/CDtscs.id +- tag: tscs +- skipDeployment: "false" +CDtscs-PROD-E2E.CN-Prod: +- name: CD_tscs PROD-E2E +- mzName: CD_tscs/management-zone/CDtscs.name +- mzId: CD_tscs/management-zone/CDtscs.id +- tag: tscs +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDtscs-INT-TEST: +- name: CD_tscs INT-TEST +- mzName: CD_tscs/management-zone/CDtscs.name +- mzId: CD_tscs/management-zone/CDtscs.id +- tag: tscs +- skipDeployment: "true" +#Configuration +CDtscs-INT-TEST.EMEA-PreProd: +- name: CD_tscs INT-TEST +- mzName: CD_tscs/management-zone/CDtscs.name +- mzId: CD_tscs/management-zone/CDtscs.id +- tag: tscs +- skipDeployment: "false" +CDtscs-INT-TEST.NA-PreProd: +- name: CD_tscs INT-TEST +- mzName: CD_tscs/management-zone/CDtscs.name +- mzId: CD_tscs/management-zone/CDtscs.id +- env: INT +- skipDeployment: "false" +CDtscs-INT-TEST.CN-PreProd: +- name: CD_tscs INT-TEST +- mzName: CD_tscs/management-zone/CDtscs.name +- mzId: CD_tscs/management-zone/CDtscs.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tscs/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_tscs/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tscs/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tscs/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_tscs/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tscs/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tscs/management-zone/README.md b/BMW-Dynatrace-config/CD_tscs/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tscs/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_tscs/management-zone/default.json b/BMW-Dynatrace-config/CD_tscs/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_tscs/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tscs/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_tscs/management-zone/management-zone.yaml new file mode 100644 index 00000000..d258203b --- /dev/null +++ b/BMW-Dynatrace-config/CD_tscs/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDtscs: default.json + +CDtscs: +- name: CD_tscs +- tag: tscs diff --git a/BMW-Dynatrace-config/CD_tscs/notification/README.md b/BMW-Dynatrace-config/CD_tscs/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tscs/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tscs/notification/email.json b/BMW-Dynatrace-config/CD_tscs/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tscs/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tscs/notification/msTeams.json b/BMW-Dynatrace-config/CD_tscs/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tscs/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tscs/notification/notification.yaml b/BMW-Dynatrace-config/CD_tscs/notification/notification.yaml new file mode 100644 index 00000000..92aa4e52 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tscs/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDtscs-PROD: msTeams.json +- CDtscs-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtscs-PROD: +- name: CD_tscs PROD +- alertingProfile: CD_tscs/alerting-profile/CDtscs-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtscs-PROD.EMEA-Prod: +- name: CD_tscs PROD +- alertingProfile: CD_tscs/alerting-profile/CDtscs-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDtscs-PROD.NA-Prod: +- name: CD_tscs PROD +- alertingProfile: CD_tscs/alerting-profile/CDtscs-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDtscs-PROD.CN-Prod: +- name: CD_tscs PROD +- alertingProfile: CD_tscs/alerting-profile/CDtscs-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtscs-INT: +- name: CD_tscs INT +- alertingProfile: CD_tscs/alerting-profile/CDtscs-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtscs-INT.EMEA-PreProd: +- name: CD_tscs INT +- alertingProfile: CD_tscs/alerting-profile/CDtscs-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDtscs-INT.NA-PreProd: +- name: CD_tscs INT +- alertingProfile: CD_tscs/alerting-profile/CDtscs-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDtscs-INT.CN-PreProd: +- name: CD_tscs INT +- alertingProfile: CD_tscs/alerting-profile/CDtscs-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tscs/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_tscs/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_tscs/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tscs/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_tscs/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_tscs/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tscs/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_tscs/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..3159031f --- /dev/null +++ b/BMW-Dynatrace-config/CD_tscs/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- tscs: default.json + +tscs: +- name: CD_tscs - +- mzName: CD_tscs/management-zone/CDtscs.name +- mzId: CD_tscs/management-zone/CDtscs.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsmb/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_tsmb/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..f391eb95 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsmb/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDtsmb-PROD: default.json +- CDtsmb-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDtsmb-PROD: +- name: CD_tsmb PROD +- tag: tsmb +- mzId: CD_tsmb/management-zone/CDtsmb.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDtsmb-PROD.EMEA-Prod: +- name: CD_tsmb PROD +- tag: tsmb +- mzId: CD_tsmb/management-zone/CDtsmb.id +- env: PROD +- skipDeployment: "false" +CDtsmb-PROD.NA-Prod: +- name: CD_tsmb PROD +- tag: tsmb +- mzId: CD_tsmb/management-zone/CDtsmb.id +- env: PROD +- skipDeployment: "false" +CDtsmb-PROD.CN-Prod: +- name: CD_tsmb PROD +- tag: tsmb +- mzId: CD_tsmb/management-zone/CDtsmb.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDtsmb-INT: +- name: CD_tsmb INT +- tag: tsmb +- mzId: CD_tsmb/management-zone/CDtsmb.id +- env: INT +- skipDeployment: "true" +#Configuration +CDtsmb-INT.EMEA-PreProd: +- name: CD_tsmb INT +- tag: tsmb +- mzId: CD_tsmb/management-zone/CDtsmb.id +- env: INT +- skipDeployment: "false" +CDtsmb-INT.NA-PreProd: +- name: CD_tsmb INT +- tag: tsmb +- mzId: CD_tsmb/management-zone/CDtsmb.id +- env: INT +- skipDeployment: "false" +CDtsmb-INT.CN-PreProd: +- name: CD_tsmb INT +- tag: tsmb +- mzId: CD_tsmb/management-zone/CDtsmb.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsmb/alerting-profile/default.json b/BMW-Dynatrace-config/CD_tsmb/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsmb/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsmb/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_tsmb/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsmb/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsmb/custom-service-java/README.md b/BMW-Dynatrace-config/CD_tsmb/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsmb/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsmb/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_tsmb/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsmb/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsmb/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_tsmb/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsmb/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsmb/dashboard/README.md b/BMW-Dynatrace-config/CD_tsmb/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsmb/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsmb/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_tsmb/dashboard/dashboard.yaml new file mode 100644 index 00000000..5f1074c4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsmb/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDtsmb-PROD-E2E: defaultPRODE2E.json +- CDtsmb-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDtsmb-PROD-E2E: +- name: CD_tsmb PROD-E2E +- mzName: CD_tsmb/management-zone/CDtsmb.name +- mzId: CD_tsmb/management-zone/CDtsmb.id +- skipDeployment: "true" +#Configuration +CDtsmb-PROD-E2E.EMEA-Prod: +- name: CD_tsmb PROD-E2E +- mzName: CD_tsmb/management-zone/CDtsmb.name +- mzId: CD_tsmb/management-zone/CDtsmb.id +- tag: tsmb +- skipDeployment: "false" +CDtsmb-PROD-E2E.NA-Prod: +- name: CD_tsmb PROD-E2E +- mzName: CD_tsmb/management-zone/CDtsmb.name +- mzId: CD_tsmb/management-zone/CDtsmb.id +- tag: tsmb +- skipDeployment: "false" +CDtsmb-PROD-E2E.CN-Prod: +- name: CD_tsmb PROD-E2E +- mzName: CD_tsmb/management-zone/CDtsmb.name +- mzId: CD_tsmb/management-zone/CDtsmb.id +- tag: tsmb +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDtsmb-INT-TEST: +- name: CD_tsmb INT-TEST +- mzName: CD_tsmb/management-zone/CDtsmb.name +- mzId: CD_tsmb/management-zone/CDtsmb.id +- tag: tsmb +- skipDeployment: "true" +#Configuration +CDtsmb-INT-TEST.EMEA-PreProd: +- name: CD_tsmb INT-TEST +- mzName: CD_tsmb/management-zone/CDtsmb.name +- mzId: CD_tsmb/management-zone/CDtsmb.id +- tag: tsmb +- skipDeployment: "false" +CDtsmb-INT-TEST.NA-PreProd: +- name: CD_tsmb INT-TEST +- mzName: CD_tsmb/management-zone/CDtsmb.name +- mzId: CD_tsmb/management-zone/CDtsmb.id +- env: INT +- skipDeployment: "false" +CDtsmb-INT-TEST.CN-PreProd: +- name: CD_tsmb INT-TEST +- mzName: CD_tsmb/management-zone/CDtsmb.name +- mzId: CD_tsmb/management-zone/CDtsmb.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsmb/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_tsmb/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsmb/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsmb/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_tsmb/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsmb/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsmb/management-zone/README.md b/BMW-Dynatrace-config/CD_tsmb/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsmb/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_tsmb/management-zone/default.json b/BMW-Dynatrace-config/CD_tsmb/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsmb/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsmb/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_tsmb/management-zone/management-zone.yaml new file mode 100644 index 00000000..e21ee500 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsmb/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDtsmb: default.json + +CDtsmb: +- name: CD_tsmb +- tag: tsmb diff --git a/BMW-Dynatrace-config/CD_tsmb/notification/README.md b/BMW-Dynatrace-config/CD_tsmb/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsmb/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsmb/notification/email.json b/BMW-Dynatrace-config/CD_tsmb/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsmb/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsmb/notification/msTeams.json b/BMW-Dynatrace-config/CD_tsmb/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsmb/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsmb/notification/notification.yaml b/BMW-Dynatrace-config/CD_tsmb/notification/notification.yaml new file mode 100644 index 00000000..eb420ed9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsmb/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDtsmb-PROD: msTeams.json +- CDtsmb-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtsmb-PROD: +- name: CD_tsmb PROD +- alertingProfile: CD_tsmb/alerting-profile/CDtsmb-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtsmb-PROD.EMEA-Prod: +- name: CD_tsmb PROD +- alertingProfile: CD_tsmb/alerting-profile/CDtsmb-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDtsmb-PROD.NA-Prod: +- name: CD_tsmb PROD +- alertingProfile: CD_tsmb/alerting-profile/CDtsmb-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDtsmb-PROD.CN-Prod: +- name: CD_tsmb PROD +- alertingProfile: CD_tsmb/alerting-profile/CDtsmb-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtsmb-INT: +- name: CD_tsmb INT +- alertingProfile: CD_tsmb/alerting-profile/CDtsmb-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtsmb-INT.EMEA-PreProd: +- name: CD_tsmb INT +- alertingProfile: CD_tsmb/alerting-profile/CDtsmb-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDtsmb-INT.NA-PreProd: +- name: CD_tsmb INT +- alertingProfile: CD_tsmb/alerting-profile/CDtsmb-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDtsmb-INT.CN-PreProd: +- name: CD_tsmb INT +- alertingProfile: CD_tsmb/alerting-profile/CDtsmb-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsmb/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_tsmb/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsmb/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsmb/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_tsmb/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsmb/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsmb/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_tsmb/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..1d0040f4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsmb/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- tsmb: default.json + +tsmb: +- name: CD_tsmb - +- mzName: CD_tsmb/management-zone/CDtsmb.name +- mzId: CD_tsmb/management-zone/CDtsmb.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-cmr/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_tsr-cmr/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..ce09221e --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-cmr/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDtsr-cmr-PROD: default.json +- CDtsr-cmr-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDtsr-cmr-PROD: +- name: CD_tsr-cmr PROD +- tag: tsr-cmr +- mzId: CD_tsr-cmr/management-zone/CDtsr-cmr.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDtsr-cmr-PROD.EMEA-Prod: +- name: CD_tsr-cmr PROD +- tag: tsr-cmr +- mzId: CD_tsr-cmr/management-zone/CDtsr-cmr.id +- env: PROD +- skipDeployment: "false" +CDtsr-cmr-PROD.NA-Prod: +- name: CD_tsr-cmr PROD +- tag: tsr-cmr +- mzId: CD_tsr-cmr/management-zone/CDtsr-cmr.id +- env: PROD +- skipDeployment: "false" +CDtsr-cmr-PROD.CN-Prod: +- name: CD_tsr-cmr PROD +- tag: tsr-cmr +- mzId: CD_tsr-cmr/management-zone/CDtsr-cmr.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDtsr-cmr-INT: +- name: CD_tsr-cmr INT +- tag: tsr-cmr +- mzId: CD_tsr-cmr/management-zone/CDtsr-cmr.id +- env: INT +- skipDeployment: "true" +#Configuration +CDtsr-cmr-INT.EMEA-PreProd: +- name: CD_tsr-cmr INT +- tag: tsr-cmr +- mzId: CD_tsr-cmr/management-zone/CDtsr-cmr.id +- env: INT +- skipDeployment: "false" +CDtsr-cmr-INT.NA-PreProd: +- name: CD_tsr-cmr INT +- tag: tsr-cmr +- mzId: CD_tsr-cmr/management-zone/CDtsr-cmr.id +- env: INT +- skipDeployment: "false" +CDtsr-cmr-INT.CN-PreProd: +- name: CD_tsr-cmr INT +- tag: tsr-cmr +- mzId: CD_tsr-cmr/management-zone/CDtsr-cmr.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-cmr/alerting-profile/default.json b/BMW-Dynatrace-config/CD_tsr-cmr/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-cmr/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-cmr/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_tsr-cmr/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-cmr/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-cmr/custom-service-java/README.md b/BMW-Dynatrace-config/CD_tsr-cmr/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-cmr/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-cmr/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_tsr-cmr/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-cmr/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-cmr/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_tsr-cmr/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-cmr/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-cmr/dashboard/README.md b/BMW-Dynatrace-config/CD_tsr-cmr/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-cmr/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-cmr/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_tsr-cmr/dashboard/dashboard.yaml new file mode 100644 index 00000000..3d557c59 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-cmr/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDtsr-cmr-PROD-E2E: defaultPRODE2E.json +- CDtsr-cmr-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDtsr-cmr-PROD-E2E: +- name: CD_tsr-cmr PROD-E2E +- mzName: CD_tsr-cmr/management-zone/CDtsr-cmr.name +- mzId: CD_tsr-cmr/management-zone/CDtsr-cmr.id +- skipDeployment: "true" +#Configuration +CDtsr-cmr-PROD-E2E.EMEA-Prod: +- name: CD_tsr-cmr PROD-E2E +- mzName: CD_tsr-cmr/management-zone/CDtsr-cmr.name +- mzId: CD_tsr-cmr/management-zone/CDtsr-cmr.id +- tag: tsr-cmr +- skipDeployment: "false" +CDtsr-cmr-PROD-E2E.NA-Prod: +- name: CD_tsr-cmr PROD-E2E +- mzName: CD_tsr-cmr/management-zone/CDtsr-cmr.name +- mzId: CD_tsr-cmr/management-zone/CDtsr-cmr.id +- tag: tsr-cmr +- skipDeployment: "false" +CDtsr-cmr-PROD-E2E.CN-Prod: +- name: CD_tsr-cmr PROD-E2E +- mzName: CD_tsr-cmr/management-zone/CDtsr-cmr.name +- mzId: CD_tsr-cmr/management-zone/CDtsr-cmr.id +- tag: tsr-cmr +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDtsr-cmr-INT-TEST: +- name: CD_tsr-cmr INT-TEST +- mzName: CD_tsr-cmr/management-zone/CDtsr-cmr.name +- mzId: CD_tsr-cmr/management-zone/CDtsr-cmr.id +- tag: tsr-cmr +- skipDeployment: "true" +#Configuration +CDtsr-cmr-INT-TEST.EMEA-PreProd: +- name: CD_tsr-cmr INT-TEST +- mzName: CD_tsr-cmr/management-zone/CDtsr-cmr.name +- mzId: CD_tsr-cmr/management-zone/CDtsr-cmr.id +- tag: tsr-cmr +- skipDeployment: "false" +CDtsr-cmr-INT-TEST.NA-PreProd: +- name: CD_tsr-cmr INT-TEST +- mzName: CD_tsr-cmr/management-zone/CDtsr-cmr.name +- mzId: CD_tsr-cmr/management-zone/CDtsr-cmr.id +- env: INT +- skipDeployment: "false" +CDtsr-cmr-INT-TEST.CN-PreProd: +- name: CD_tsr-cmr INT-TEST +- mzName: CD_tsr-cmr/management-zone/CDtsr-cmr.name +- mzId: CD_tsr-cmr/management-zone/CDtsr-cmr.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-cmr/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_tsr-cmr/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-cmr/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-cmr/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_tsr-cmr/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-cmr/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-cmr/management-zone/README.md b/BMW-Dynatrace-config/CD_tsr-cmr/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-cmr/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_tsr-cmr/management-zone/default.json b/BMW-Dynatrace-config/CD_tsr-cmr/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-cmr/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-cmr/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_tsr-cmr/management-zone/management-zone.yaml new file mode 100644 index 00000000..20c7d056 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-cmr/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDtsr-cmr: default.json + +CDtsr-cmr: +- name: CD_tsr-cmr +- tag: tsr-cmr diff --git a/BMW-Dynatrace-config/CD_tsr-cmr/notification/README.md b/BMW-Dynatrace-config/CD_tsr-cmr/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-cmr/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-cmr/notification/email.json b/BMW-Dynatrace-config/CD_tsr-cmr/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-cmr/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-cmr/notification/msTeams.json b/BMW-Dynatrace-config/CD_tsr-cmr/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-cmr/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-cmr/notification/notification.yaml b/BMW-Dynatrace-config/CD_tsr-cmr/notification/notification.yaml new file mode 100644 index 00000000..88fe8de0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-cmr/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDtsr-cmr-PROD: msTeams.json +- CDtsr-cmr-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtsr-cmr-PROD: +- name: CD_tsr-cmr PROD +- alertingProfile: CD_tsr-cmr/alerting-profile/CDtsr-cmr-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtsr-cmr-PROD.EMEA-Prod: +- name: CD_tsr-cmr PROD +- alertingProfile: CD_tsr-cmr/alerting-profile/CDtsr-cmr-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDtsr-cmr-PROD.NA-Prod: +- name: CD_tsr-cmr PROD +- alertingProfile: CD_tsr-cmr/alerting-profile/CDtsr-cmr-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDtsr-cmr-PROD.CN-Prod: +- name: CD_tsr-cmr PROD +- alertingProfile: CD_tsr-cmr/alerting-profile/CDtsr-cmr-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtsr-cmr-INT: +- name: CD_tsr-cmr INT +- alertingProfile: CD_tsr-cmr/alerting-profile/CDtsr-cmr-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtsr-cmr-INT.EMEA-PreProd: +- name: CD_tsr-cmr INT +- alertingProfile: CD_tsr-cmr/alerting-profile/CDtsr-cmr-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDtsr-cmr-INT.NA-PreProd: +- name: CD_tsr-cmr INT +- alertingProfile: CD_tsr-cmr/alerting-profile/CDtsr-cmr-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDtsr-cmr-INT.CN-PreProd: +- name: CD_tsr-cmr INT +- alertingProfile: CD_tsr-cmr/alerting-profile/CDtsr-cmr-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-cmr/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_tsr-cmr/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-cmr/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-cmr/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_tsr-cmr/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-cmr/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-cmr/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_tsr-cmr/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..2ab5f8c9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-cmr/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- tsr-cmr: default.json + +tsr-cmr: +- name: CD_tsr-cmr - +- mzName: CD_tsr-cmr/management-zone/CDtsr-cmr.name +- mzId: CD_tsr-cmr/management-zone/CDtsr-cmr.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-dd/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_tsr-dd/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..80a506fe --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-dd/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDtsr-dd-PROD: default.json +- CDtsr-dd-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDtsr-dd-PROD: +- name: CD_tsr-dd PROD +- tag: tsr-dd +- mzId: CD_tsr-dd/management-zone/CDtsr-dd.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDtsr-dd-PROD.EMEA-Prod: +- name: CD_tsr-dd PROD +- tag: tsr-dd +- mzId: CD_tsr-dd/management-zone/CDtsr-dd.id +- env: PROD +- skipDeployment: "false" +CDtsr-dd-PROD.NA-Prod: +- name: CD_tsr-dd PROD +- tag: tsr-dd +- mzId: CD_tsr-dd/management-zone/CDtsr-dd.id +- env: PROD +- skipDeployment: "false" +CDtsr-dd-PROD.CN-Prod: +- name: CD_tsr-dd PROD +- tag: tsr-dd +- mzId: CD_tsr-dd/management-zone/CDtsr-dd.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDtsr-dd-INT: +- name: CD_tsr-dd INT +- tag: tsr-dd +- mzId: CD_tsr-dd/management-zone/CDtsr-dd.id +- env: INT +- skipDeployment: "true" +#Configuration +CDtsr-dd-INT.EMEA-PreProd: +- name: CD_tsr-dd INT +- tag: tsr-dd +- mzId: CD_tsr-dd/management-zone/CDtsr-dd.id +- env: INT +- skipDeployment: "false" +CDtsr-dd-INT.NA-PreProd: +- name: CD_tsr-dd INT +- tag: tsr-dd +- mzId: CD_tsr-dd/management-zone/CDtsr-dd.id +- env: INT +- skipDeployment: "false" +CDtsr-dd-INT.CN-PreProd: +- name: CD_tsr-dd INT +- tag: tsr-dd +- mzId: CD_tsr-dd/management-zone/CDtsr-dd.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-dd/alerting-profile/default.json b/BMW-Dynatrace-config/CD_tsr-dd/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-dd/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-dd/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_tsr-dd/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-dd/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-dd/custom-service-java/README.md b/BMW-Dynatrace-config/CD_tsr-dd/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-dd/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-dd/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_tsr-dd/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-dd/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-dd/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_tsr-dd/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-dd/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-dd/dashboard/README.md b/BMW-Dynatrace-config/CD_tsr-dd/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-dd/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-dd/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_tsr-dd/dashboard/dashboard.yaml new file mode 100644 index 00000000..97367081 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-dd/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDtsr-dd-PROD-E2E: defaultPRODE2E.json +- CDtsr-dd-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDtsr-dd-PROD-E2E: +- name: CD_tsr-dd PROD-E2E +- mzName: CD_tsr-dd/management-zone/CDtsr-dd.name +- mzId: CD_tsr-dd/management-zone/CDtsr-dd.id +- skipDeployment: "true" +#Configuration +CDtsr-dd-PROD-E2E.EMEA-Prod: +- name: CD_tsr-dd PROD-E2E +- mzName: CD_tsr-dd/management-zone/CDtsr-dd.name +- mzId: CD_tsr-dd/management-zone/CDtsr-dd.id +- tag: tsr-dd +- skipDeployment: "false" +CDtsr-dd-PROD-E2E.NA-Prod: +- name: CD_tsr-dd PROD-E2E +- mzName: CD_tsr-dd/management-zone/CDtsr-dd.name +- mzId: CD_tsr-dd/management-zone/CDtsr-dd.id +- tag: tsr-dd +- skipDeployment: "false" +CDtsr-dd-PROD-E2E.CN-Prod: +- name: CD_tsr-dd PROD-E2E +- mzName: CD_tsr-dd/management-zone/CDtsr-dd.name +- mzId: CD_tsr-dd/management-zone/CDtsr-dd.id +- tag: tsr-dd +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDtsr-dd-INT-TEST: +- name: CD_tsr-dd INT-TEST +- mzName: CD_tsr-dd/management-zone/CDtsr-dd.name +- mzId: CD_tsr-dd/management-zone/CDtsr-dd.id +- tag: tsr-dd +- skipDeployment: "true" +#Configuration +CDtsr-dd-INT-TEST.EMEA-PreProd: +- name: CD_tsr-dd INT-TEST +- mzName: CD_tsr-dd/management-zone/CDtsr-dd.name +- mzId: CD_tsr-dd/management-zone/CDtsr-dd.id +- tag: tsr-dd +- skipDeployment: "false" +CDtsr-dd-INT-TEST.NA-PreProd: +- name: CD_tsr-dd INT-TEST +- mzName: CD_tsr-dd/management-zone/CDtsr-dd.name +- mzId: CD_tsr-dd/management-zone/CDtsr-dd.id +- env: INT +- skipDeployment: "false" +CDtsr-dd-INT-TEST.CN-PreProd: +- name: CD_tsr-dd INT-TEST +- mzName: CD_tsr-dd/management-zone/CDtsr-dd.name +- mzId: CD_tsr-dd/management-zone/CDtsr-dd.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-dd/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_tsr-dd/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-dd/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-dd/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_tsr-dd/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-dd/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-dd/management-zone/README.md b/BMW-Dynatrace-config/CD_tsr-dd/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-dd/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_tsr-dd/management-zone/default.json b/BMW-Dynatrace-config/CD_tsr-dd/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-dd/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-dd/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_tsr-dd/management-zone/management-zone.yaml new file mode 100644 index 00000000..f6c6142d --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-dd/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDtsr-dd: default.json + +CDtsr-dd: +- name: CD_tsr-dd +- tag: tsr-dd diff --git a/BMW-Dynatrace-config/CD_tsr-dd/notification/README.md b/BMW-Dynatrace-config/CD_tsr-dd/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-dd/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-dd/notification/email.json b/BMW-Dynatrace-config/CD_tsr-dd/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-dd/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-dd/notification/msTeams.json b/BMW-Dynatrace-config/CD_tsr-dd/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-dd/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-dd/notification/notification.yaml b/BMW-Dynatrace-config/CD_tsr-dd/notification/notification.yaml new file mode 100644 index 00000000..adf5b780 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-dd/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDtsr-dd-PROD: msTeams.json +- CDtsr-dd-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtsr-dd-PROD: +- name: CD_tsr-dd PROD +- alertingProfile: CD_tsr-dd/alerting-profile/CDtsr-dd-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtsr-dd-PROD.EMEA-Prod: +- name: CD_tsr-dd PROD +- alertingProfile: CD_tsr-dd/alerting-profile/CDtsr-dd-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDtsr-dd-PROD.NA-Prod: +- name: CD_tsr-dd PROD +- alertingProfile: CD_tsr-dd/alerting-profile/CDtsr-dd-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDtsr-dd-PROD.CN-Prod: +- name: CD_tsr-dd PROD +- alertingProfile: CD_tsr-dd/alerting-profile/CDtsr-dd-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtsr-dd-INT: +- name: CD_tsr-dd INT +- alertingProfile: CD_tsr-dd/alerting-profile/CDtsr-dd-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtsr-dd-INT.EMEA-PreProd: +- name: CD_tsr-dd INT +- alertingProfile: CD_tsr-dd/alerting-profile/CDtsr-dd-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDtsr-dd-INT.NA-PreProd: +- name: CD_tsr-dd INT +- alertingProfile: CD_tsr-dd/alerting-profile/CDtsr-dd-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDtsr-dd-INT.CN-PreProd: +- name: CD_tsr-dd INT +- alertingProfile: CD_tsr-dd/alerting-profile/CDtsr-dd-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-dd/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_tsr-dd/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-dd/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-dd/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_tsr-dd/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-dd/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-dd/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_tsr-dd/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..7d047ccd --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-dd/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- tsr-dd: default.json + +tsr-dd: +- name: CD_tsr-dd - +- mzName: CD_tsr-dd/management-zone/CDtsr-dd.name +- mzId: CD_tsr-dd/management-zone/CDtsr-dd.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-vu/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_tsr-vu/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..bd5e0adb --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-vu/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDtsr-vu-PROD: default.json +- CDtsr-vu-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDtsr-vu-PROD: +- name: CD_tsr-vu PROD +- tag: tsr-vu +- mzId: CD_tsr-vu/management-zone/CDtsr-vu.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDtsr-vu-PROD.EMEA-Prod: +- name: CD_tsr-vu PROD +- tag: tsr-vu +- mzId: CD_tsr-vu/management-zone/CDtsr-vu.id +- env: PROD +- skipDeployment: "false" +CDtsr-vu-PROD.NA-Prod: +- name: CD_tsr-vu PROD +- tag: tsr-vu +- mzId: CD_tsr-vu/management-zone/CDtsr-vu.id +- env: PROD +- skipDeployment: "false" +CDtsr-vu-PROD.CN-Prod: +- name: CD_tsr-vu PROD +- tag: tsr-vu +- mzId: CD_tsr-vu/management-zone/CDtsr-vu.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDtsr-vu-INT: +- name: CD_tsr-vu INT +- tag: tsr-vu +- mzId: CD_tsr-vu/management-zone/CDtsr-vu.id +- env: INT +- skipDeployment: "true" +#Configuration +CDtsr-vu-INT.EMEA-PreProd: +- name: CD_tsr-vu INT +- tag: tsr-vu +- mzId: CD_tsr-vu/management-zone/CDtsr-vu.id +- env: INT +- skipDeployment: "false" +CDtsr-vu-INT.NA-PreProd: +- name: CD_tsr-vu INT +- tag: tsr-vu +- mzId: CD_tsr-vu/management-zone/CDtsr-vu.id +- env: INT +- skipDeployment: "false" +CDtsr-vu-INT.CN-PreProd: +- name: CD_tsr-vu INT +- tag: tsr-vu +- mzId: CD_tsr-vu/management-zone/CDtsr-vu.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-vu/alerting-profile/default.json b/BMW-Dynatrace-config/CD_tsr-vu/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-vu/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-vu/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_tsr-vu/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-vu/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-vu/custom-service-java/README.md b/BMW-Dynatrace-config/CD_tsr-vu/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-vu/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-vu/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_tsr-vu/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-vu/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-vu/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_tsr-vu/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-vu/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-vu/dashboard/README.md b/BMW-Dynatrace-config/CD_tsr-vu/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-vu/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-vu/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_tsr-vu/dashboard/dashboard.yaml new file mode 100644 index 00000000..be57a315 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-vu/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDtsr-vu-PROD-E2E: defaultPRODE2E.json +- CDtsr-vu-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDtsr-vu-PROD-E2E: +- name: CD_tsr-vu PROD-E2E +- mzName: CD_tsr-vu/management-zone/CDtsr-vu.name +- mzId: CD_tsr-vu/management-zone/CDtsr-vu.id +- skipDeployment: "true" +#Configuration +CDtsr-vu-PROD-E2E.EMEA-Prod: +- name: CD_tsr-vu PROD-E2E +- mzName: CD_tsr-vu/management-zone/CDtsr-vu.name +- mzId: CD_tsr-vu/management-zone/CDtsr-vu.id +- tag: tsr-vu +- skipDeployment: "false" +CDtsr-vu-PROD-E2E.NA-Prod: +- name: CD_tsr-vu PROD-E2E +- mzName: CD_tsr-vu/management-zone/CDtsr-vu.name +- mzId: CD_tsr-vu/management-zone/CDtsr-vu.id +- tag: tsr-vu +- skipDeployment: "false" +CDtsr-vu-PROD-E2E.CN-Prod: +- name: CD_tsr-vu PROD-E2E +- mzName: CD_tsr-vu/management-zone/CDtsr-vu.name +- mzId: CD_tsr-vu/management-zone/CDtsr-vu.id +- tag: tsr-vu +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDtsr-vu-INT-TEST: +- name: CD_tsr-vu INT-TEST +- mzName: CD_tsr-vu/management-zone/CDtsr-vu.name +- mzId: CD_tsr-vu/management-zone/CDtsr-vu.id +- tag: tsr-vu +- skipDeployment: "true" +#Configuration +CDtsr-vu-INT-TEST.EMEA-PreProd: +- name: CD_tsr-vu INT-TEST +- mzName: CD_tsr-vu/management-zone/CDtsr-vu.name +- mzId: CD_tsr-vu/management-zone/CDtsr-vu.id +- tag: tsr-vu +- skipDeployment: "false" +CDtsr-vu-INT-TEST.NA-PreProd: +- name: CD_tsr-vu INT-TEST +- mzName: CD_tsr-vu/management-zone/CDtsr-vu.name +- mzId: CD_tsr-vu/management-zone/CDtsr-vu.id +- env: INT +- skipDeployment: "false" +CDtsr-vu-INT-TEST.CN-PreProd: +- name: CD_tsr-vu INT-TEST +- mzName: CD_tsr-vu/management-zone/CDtsr-vu.name +- mzId: CD_tsr-vu/management-zone/CDtsr-vu.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-vu/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_tsr-vu/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-vu/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-vu/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_tsr-vu/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-vu/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-vu/management-zone/README.md b/BMW-Dynatrace-config/CD_tsr-vu/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-vu/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_tsr-vu/management-zone/default.json b/BMW-Dynatrace-config/CD_tsr-vu/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-vu/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-vu/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_tsr-vu/management-zone/management-zone.yaml new file mode 100644 index 00000000..3f16c2a0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-vu/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDtsr-vu: default.json + +CDtsr-vu: +- name: CD_tsr-vu +- tag: tsr-vu diff --git a/BMW-Dynatrace-config/CD_tsr-vu/notification/README.md b/BMW-Dynatrace-config/CD_tsr-vu/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-vu/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-vu/notification/email.json b/BMW-Dynatrace-config/CD_tsr-vu/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-vu/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-vu/notification/msTeams.json b/BMW-Dynatrace-config/CD_tsr-vu/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-vu/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-vu/notification/notification.yaml b/BMW-Dynatrace-config/CD_tsr-vu/notification/notification.yaml new file mode 100644 index 00000000..f5ce3345 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-vu/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDtsr-vu-PROD: msTeams.json +- CDtsr-vu-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtsr-vu-PROD: +- name: CD_tsr-vu PROD +- alertingProfile: CD_tsr-vu/alerting-profile/CDtsr-vu-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtsr-vu-PROD.EMEA-Prod: +- name: CD_tsr-vu PROD +- alertingProfile: CD_tsr-vu/alerting-profile/CDtsr-vu-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDtsr-vu-PROD.NA-Prod: +- name: CD_tsr-vu PROD +- alertingProfile: CD_tsr-vu/alerting-profile/CDtsr-vu-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDtsr-vu-PROD.CN-Prod: +- name: CD_tsr-vu PROD +- alertingProfile: CD_tsr-vu/alerting-profile/CDtsr-vu-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtsr-vu-INT: +- name: CD_tsr-vu INT +- alertingProfile: CD_tsr-vu/alerting-profile/CDtsr-vu-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtsr-vu-INT.EMEA-PreProd: +- name: CD_tsr-vu INT +- alertingProfile: CD_tsr-vu/alerting-profile/CDtsr-vu-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDtsr-vu-INT.NA-PreProd: +- name: CD_tsr-vu INT +- alertingProfile: CD_tsr-vu/alerting-profile/CDtsr-vu-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDtsr-vu-INT.CN-PreProd: +- name: CD_tsr-vu INT +- alertingProfile: CD_tsr-vu/alerting-profile/CDtsr-vu-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-vu/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_tsr-vu/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-vu/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-vu/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_tsr-vu/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-vu/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-vu/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_tsr-vu/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..89eedcd1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-vu/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- tsr-vu: default.json + +tsr-vu: +- name: CD_tsr-vu - +- mzName: CD_tsr-vu/management-zone/CDtsr-vu.name +- mzId: CD_tsr-vu/management-zone/CDtsr-vu.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsrservice/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_tsrservice/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..4292394b --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsrservice/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDtsrservice-PROD: default.json +- CDtsrservice-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDtsrservice-PROD: +- name: CD_tsrservice PROD +- tag: tsrservice +- mzId: CD_tsrservice/management-zone/CDtsrservice.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDtsrservice-PROD.EMEA-Prod: +- name: CD_tsrservice PROD +- tag: tsrservice +- mzId: CD_tsrservice/management-zone/CDtsrservice.id +- env: PROD +- skipDeployment: "false" +CDtsrservice-PROD.NA-Prod: +- name: CD_tsrservice PROD +- tag: tsrservice +- mzId: CD_tsrservice/management-zone/CDtsrservice.id +- env: PROD +- skipDeployment: "false" +CDtsrservice-PROD.CN-Prod: +- name: CD_tsrservice PROD +- tag: tsrservice +- mzId: CD_tsrservice/management-zone/CDtsrservice.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDtsrservice-INT: +- name: CD_tsrservice INT +- tag: tsrservice +- mzId: CD_tsrservice/management-zone/CDtsrservice.id +- env: INT +- skipDeployment: "true" +#Configuration +CDtsrservice-INT.EMEA-PreProd: +- name: CD_tsrservice INT +- tag: tsrservice +- mzId: CD_tsrservice/management-zone/CDtsrservice.id +- env: INT +- skipDeployment: "false" +CDtsrservice-INT.NA-PreProd: +- name: CD_tsrservice INT +- tag: tsrservice +- mzId: CD_tsrservice/management-zone/CDtsrservice.id +- env: INT +- skipDeployment: "false" +CDtsrservice-INT.CN-PreProd: +- name: CD_tsrservice INT +- tag: tsrservice +- mzId: CD_tsrservice/management-zone/CDtsrservice.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsrservice/alerting-profile/default.json b/BMW-Dynatrace-config/CD_tsrservice/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsrservice/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsrservice/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_tsrservice/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsrservice/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsrservice/custom-service-java/README.md b/BMW-Dynatrace-config/CD_tsrservice/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsrservice/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsrservice/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_tsrservice/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsrservice/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsrservice/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_tsrservice/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsrservice/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsrservice/dashboard/README.md b/BMW-Dynatrace-config/CD_tsrservice/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsrservice/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsrservice/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_tsrservice/dashboard/dashboard.yaml new file mode 100644 index 00000000..9c394bac --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsrservice/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDtsrservice-PROD-E2E: defaultPRODE2E.json +- CDtsrservice-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDtsrservice-PROD-E2E: +- name: CD_tsrservice PROD-E2E +- mzName: CD_tsrservice/management-zone/CDtsrservice.name +- mzId: CD_tsrservice/management-zone/CDtsrservice.id +- skipDeployment: "true" +#Configuration +CDtsrservice-PROD-E2E.EMEA-Prod: +- name: CD_tsrservice PROD-E2E +- mzName: CD_tsrservice/management-zone/CDtsrservice.name +- mzId: CD_tsrservice/management-zone/CDtsrservice.id +- tag: tsrservice +- skipDeployment: "false" +CDtsrservice-PROD-E2E.NA-Prod: +- name: CD_tsrservice PROD-E2E +- mzName: CD_tsrservice/management-zone/CDtsrservice.name +- mzId: CD_tsrservice/management-zone/CDtsrservice.id +- tag: tsrservice +- skipDeployment: "false" +CDtsrservice-PROD-E2E.CN-Prod: +- name: CD_tsrservice PROD-E2E +- mzName: CD_tsrservice/management-zone/CDtsrservice.name +- mzId: CD_tsrservice/management-zone/CDtsrservice.id +- tag: tsrservice +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDtsrservice-INT-TEST: +- name: CD_tsrservice INT-TEST +- mzName: CD_tsrservice/management-zone/CDtsrservice.name +- mzId: CD_tsrservice/management-zone/CDtsrservice.id +- tag: tsrservice +- skipDeployment: "true" +#Configuration +CDtsrservice-INT-TEST.EMEA-PreProd: +- name: CD_tsrservice INT-TEST +- mzName: CD_tsrservice/management-zone/CDtsrservice.name +- mzId: CD_tsrservice/management-zone/CDtsrservice.id +- tag: tsrservice +- skipDeployment: "false" +CDtsrservice-INT-TEST.NA-PreProd: +- name: CD_tsrservice INT-TEST +- mzName: CD_tsrservice/management-zone/CDtsrservice.name +- mzId: CD_tsrservice/management-zone/CDtsrservice.id +- env: INT +- skipDeployment: "false" +CDtsrservice-INT-TEST.CN-PreProd: +- name: CD_tsrservice INT-TEST +- mzName: CD_tsrservice/management-zone/CDtsrservice.name +- mzId: CD_tsrservice/management-zone/CDtsrservice.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsrservice/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_tsrservice/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsrservice/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsrservice/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_tsrservice/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsrservice/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsrservice/management-zone/README.md b/BMW-Dynatrace-config/CD_tsrservice/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsrservice/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_tsrservice/management-zone/default.json b/BMW-Dynatrace-config/CD_tsrservice/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsrservice/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsrservice/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_tsrservice/management-zone/management-zone.yaml new file mode 100644 index 00000000..c66358d3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsrservice/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDtsrservice: default.json + +CDtsrservice: +- name: CD_tsrservice +- tag: tsrservice diff --git a/BMW-Dynatrace-config/CD_tsrservice/notification/README.md b/BMW-Dynatrace-config/CD_tsrservice/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsrservice/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsrservice/notification/email.json b/BMW-Dynatrace-config/CD_tsrservice/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsrservice/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsrservice/notification/msTeams.json b/BMW-Dynatrace-config/CD_tsrservice/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsrservice/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsrservice/notification/notification.yaml b/BMW-Dynatrace-config/CD_tsrservice/notification/notification.yaml new file mode 100644 index 00000000..946cf2ce --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsrservice/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDtsrservice-PROD: msTeams.json +- CDtsrservice-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtsrservice-PROD: +- name: CD_tsrservice PROD +- alertingProfile: CD_tsrservice/alerting-profile/CDtsrservice-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtsrservice-PROD.EMEA-Prod: +- name: CD_tsrservice PROD +- alertingProfile: CD_tsrservice/alerting-profile/CDtsrservice-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDtsrservice-PROD.NA-Prod: +- name: CD_tsrservice PROD +- alertingProfile: CD_tsrservice/alerting-profile/CDtsrservice-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDtsrservice-PROD.CN-Prod: +- name: CD_tsrservice PROD +- alertingProfile: CD_tsrservice/alerting-profile/CDtsrservice-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDtsrservice-INT: +- name: CD_tsrservice INT +- alertingProfile: CD_tsrservice/alerting-profile/CDtsrservice-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDtsrservice-INT.EMEA-PreProd: +- name: CD_tsrservice INT +- alertingProfile: CD_tsrservice/alerting-profile/CDtsrservice-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDtsrservice-INT.NA-PreProd: +- name: CD_tsrservice INT +- alertingProfile: CD_tsrservice/alerting-profile/CDtsrservice-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDtsrservice-INT.CN-PreProd: +- name: CD_tsrservice INT +- alertingProfile: CD_tsrservice/alerting-profile/CDtsrservice-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsrservice/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_tsrservice/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsrservice/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsrservice/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_tsrservice/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsrservice/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsrservice/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_tsrservice/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..ae675cb8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsrservice/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- tsrservice: default.json + +tsrservice: +- name: CD_tsrservice - +- mzName: CD_tsrservice/management-zone/CDtsrservice.name +- mzId: CD_tsrservice/management-zone/CDtsrservice.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-activity-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_user-activity-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..0445f7cb --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-activity-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDuser-activity-service-PROD: default.json +- CDuser-activity-service-E2E: default.json +- CDuser-activity-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDuser-activity-service-PROD: +- name: CD_user-activity-service PROD +- tag: user-activity-service +- mzId: CD_user-activity-service/management-zone/CDuser-activity-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDuser-activity-service-PROD.EMEA-Prod: +- name: CD_user-activity-service PROD +- tag: user-activity-service +- mzId: CD_user-activity-service/management-zone/CDuser-activity-service.id +- env: PROD +- skipDeployment: "false" +CDuser-activity-service-PROD.NA-Prod: +- name: CD_user-activity-service PROD +- tag: user-activity-service +- mzId: CD_user-activity-service/management-zone/CDuser-activity-service.id +- env: PROD +- skipDeployment: "false" +CDuser-activity-service-PROD.CN-Prod: +- name: CD_user-activity-service PROD +- tag: user-activity-service +- mzId: CD_user-activity-service/management-zone/CDuser-activity-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDuser-activity-service-E2E: +- name: CD_user-activity-service E2E +- tag: user-activity-service +- mzId: CD_user-activity-service/management-zone/CDuser-activity-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDuser-activity-service-E2E.EMEA-Prod: +- name: CD_user-activity-service E2E +- tag: user-activity-service +- mzId: CD_user-activity-service/management-zone/CDuser-activity-service.id +- env: E2E +- skipDeployment: "false" +CDuser-activity-service-E2E.NA-Prod: +- name: CD_user-activity-service E2E +- tag: user-activity-service +- mzId: CD_user-activity-service/management-zone/CDuser-activity-service.id +- env: E2E +- skipDeployment: "false" +CDuser-activity-service-E2E.CN-Prod: +- name: CD_user-activity-service E2E +- tag: user-activity-service +- mzId: CD_user-activity-service/management-zone/CDuser-activity-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDuser-activity-service-INT: +- name: CD_user-activity-service INT +- tag: user-activity-service +- mzId: CD_user-activity-service/management-zone/CDuser-activity-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDuser-activity-service-INT.EMEA-PreProd: +- name: CD_user-activity-service INT +- tag: user-activity-service +- mzId: CD_user-activity-service/management-zone/CDuser-activity-service.id +- env: INT +- skipDeployment: "false" +CDuser-activity-service-INT.NA-PreProd: +- name: CD_user-activity-service INT +- tag: user-activity-service +- mzId: CD_user-activity-service/management-zone/CDuser-activity-service.id +- env: INT +- skipDeployment: "false" +CDuser-activity-service-INT.CN-PreProd: +- name: CD_user-activity-service INT +- tag: user-activity-service +- mzId: CD_user-activity-service/management-zone/CDuser-activity-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-activity-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_user-activity-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-activity-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-activity-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_user-activity-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-activity-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-activity-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_user-activity-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-activity-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-activity-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_user-activity-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-activity-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-activity-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_user-activity-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-activity-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-activity-service/dashboard/README.md b/BMW-Dynatrace-config/CD_user-activity-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-activity-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-activity-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_user-activity-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..95460360 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-activity-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDuser-activity-service-PROD-E2E: defaultPRODE2E.json +- CDuser-activity-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDuser-activity-service-PROD-E2E: +- name: CD_user-activity-service PROD +- mzName: CD_user-activity-service/management-zone/CDuser-activity-service.name +- mzId: CD_user-activity-service/management-zone/CDuser-activity-service.id +- skipDeployment: "true" +#Configuration +CDuser-activity-service-PROD-E2E.EMEA-Prod: +- name: CD_user-activity-service PROD +- mzName: CD_user-activity-service/management-zone/CDuser-activity-service.name +- mzId: CD_user-activity-service/management-zone/CDuser-activity-service.id +- tag: user-activity-service +- skipDeployment: "false" +CDuser-activity-service-PROD-E2E.NA-Prod: +- name: CD_user-activity-service PROD +- mzName: CD_user-activity-service/management-zone/CDuser-activity-service.name +- mzId: CD_user-activity-service/management-zone/CDuser-activity-service.id +- tag: user-activity-service +- skipDeployment: "false" +CDuser-activity-service-PROD-E2E.CN-Prod: +- name: CD_user-activity-service PROD +- mzName: CD_user-activity-service/management-zone/CDuser-activity-service.name +- mzId: CD_user-activity-service/management-zone/CDuser-activity-service.id +- tag: user-activity-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDuser-activity-service-INT-TEST: +- name: CD_user-activity-service INT-TEST +- mzName: CD_user-activity-service/management-zone/CDuser-activity-service.name +- mzId: CD_user-activity-service/management-zone/CDuser-activity-service.id +- tag: user-activity-service +- skipDeployment: "true" +#Configuration +CDuser-activity-service-INT-TEST.EMEA-PreProd: +- name: CD_user-activity-service INT-TEST +- mzName: CD_user-activity-service/management-zone/CDuser-activity-service.name +- mzId: CD_user-activity-service/management-zone/CDuser-activity-service.id +- tag: user-activity-service +- skipDeployment: "false" +CDuser-activity-service-INT-TEST.NA-PreProd: +- name: CD_user-activity-service INT-TEST +- mzName: CD_user-activity-service/management-zone/CDuser-activity-service.name +- mzId: CD_user-activity-service/management-zone/CDuser-activity-service.id +- env: INT +- skipDeployment: "false" +CDuser-activity-service-INT-TEST.CN-PreProd: +- name: CD_user-activity-service INT-TEST +- mzName: CD_user-activity-service/management-zone/CDuser-activity-service.name +- mzId: CD_user-activity-service/management-zone/CDuser-activity-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-activity-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_user-activity-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-activity-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-activity-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_user-activity-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-activity-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-activity-service/management-zone/README.md b/BMW-Dynatrace-config/CD_user-activity-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-activity-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_user-activity-service/management-zone/default.json b/BMW-Dynatrace-config/CD_user-activity-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-activity-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-activity-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_user-activity-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..e9f531b3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-activity-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDuser-activity-service: default.json + +CDuser-activity-service: +- name: CD_user-activity-service +- tag: user-activity-service diff --git a/BMW-Dynatrace-config/CD_user-activity-service/notification/README.md b/BMW-Dynatrace-config/CD_user-activity-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-activity-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-activity-service/notification/email.json b/BMW-Dynatrace-config/CD_user-activity-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-activity-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-activity-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_user-activity-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-activity-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-activity-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_user-activity-service/notification/notification.yaml new file mode 100644 index 00000000..4416cf1a --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-activity-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDuser-activity-service-PROD: msTeams.json +- CDuser-activity-service-E2E: msTeams.json +- CDuser-activity-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDuser-activity-service-PROD: +- name: CD_user-activity-service PROD +- alertingProfile: CD_user-activity-service/alerting-profile/CDuser-activity-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDuser-activity-service-PROD.EMEA-Prod: +- name: CD_user-activity-service PROD +- alertingProfile: CD_user-activity-service/alerting-profile/CDuser-activity-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDuser-activity-service-PROD.NA-Prod: +- name: CD_user-activity-service PROD +- alertingProfile: CD_user-activity-service/alerting-profile/CDuser-activity-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDuser-activity-service-PROD.CN-Prod: +- name: CD_user-activity-service PROD +- alertingProfile: CD_user-activity-service/alerting-profile/CDuser-activity-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDuser-activity-service-E2E: +- name: CD_user-activity-service E2E +- alertingProfile: CD_user-activity-service/alerting-profile/CDuser-activity-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDuser-activity-service-E2E.EMEA-Prod: +- name: CD_user-activity-service E2E +- alertingProfile: CD_user-activity-service/alerting-profile/CDuser-activity-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDuser-activity-service-E2E.NA-Prod: +- name: CD_user-activity-service E2E +- alertingProfile: CD_user-activity-service/alerting-profile/CDuser-activity-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDuser-activity-service-E2E.CN-Prod: +- name: CD_user-activity-service E2E +- alertingProfile: CD_user-activity-service/alerting-profile/CDuser-activity-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDuser-activity-service-INT: +- name: CD_user-activity-service INT +- alertingProfile: CD_user-activity-service/alerting-profile/CDuser-activity-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDuser-activity-service-INT.EMEA-PreProd: +- name: CD_user-activity-service INT +- alertingProfile: CD_user-activity-service/alerting-profile/CDuser-activity-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDuser-activity-service-INT.NA-PreProd: +- name: CD_user-activity-service INT +- alertingProfile: CD_user-activity-service/alerting-profile/CDuser-activity-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDuser-activity-service-INT.CN-PreProd: +- name: CD_user-activity-service INT +- alertingProfile: CD_user-activity-service/alerting-profile/CDuser-activity-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-activity-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_user-activity-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-activity-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-activity-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_user-activity-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-activity-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-activity-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_user-activity-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..6084d9f4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-activity-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- user-activity-service: default.json + +user-activity-service: +- name: CD_user-activity-service - +- mzName: CD_user-activity-service/management-zone/CDuser-activity-service.name +- mzId: CD_user-activity-service/management-zone/CDuser-activity-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-attributes-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_user-attributes-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..07c0e053 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-attributes-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDuser-attributes-service-PROD: default.json +- CDuser-attributes-service-E2E: default.json +- CDuser-attributes-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDuser-attributes-service-PROD: +- name: CD_user-attributes-service PROD +- tag: user-attributes-service +- mzId: CD_user-attributes-service/management-zone/CDuser-attributes-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDuser-attributes-service-PROD.EMEA-Prod: +- name: CD_user-attributes-service PROD +- tag: user-attributes-service +- mzId: CD_user-attributes-service/management-zone/CDuser-attributes-service.id +- env: PROD +- skipDeployment: "false" +CDuser-attributes-service-PROD.NA-Prod: +- name: CD_user-attributes-service PROD +- tag: user-attributes-service +- mzId: CD_user-attributes-service/management-zone/CDuser-attributes-service.id +- env: PROD +- skipDeployment: "false" +CDuser-attributes-service-PROD.CN-Prod: +- name: CD_user-attributes-service PROD +- tag: user-attributes-service +- mzId: CD_user-attributes-service/management-zone/CDuser-attributes-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDuser-attributes-service-E2E: +- name: CD_user-attributes-service E2E +- tag: user-attributes-service +- mzId: CD_user-attributes-service/management-zone/CDuser-attributes-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDuser-attributes-service-E2E.EMEA-Prod: +- name: CD_user-attributes-service E2E +- tag: user-attributes-service +- mzId: CD_user-attributes-service/management-zone/CDuser-attributes-service.id +- env: E2E +- skipDeployment: "false" +CDuser-attributes-service-E2E.NA-Prod: +- name: CD_user-attributes-service E2E +- tag: user-attributes-service +- mzId: CD_user-attributes-service/management-zone/CDuser-attributes-service.id +- env: E2E +- skipDeployment: "false" +CDuser-attributes-service-E2E.CN-Prod: +- name: CD_user-attributes-service E2E +- tag: user-attributes-service +- mzId: CD_user-attributes-service/management-zone/CDuser-attributes-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDuser-attributes-service-INT: +- name: CD_user-attributes-service INT +- tag: user-attributes-service +- mzId: CD_user-attributes-service/management-zone/CDuser-attributes-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDuser-attributes-service-INT.EMEA-PreProd: +- name: CD_user-attributes-service INT +- tag: user-attributes-service +- mzId: CD_user-attributes-service/management-zone/CDuser-attributes-service.id +- env: INT +- skipDeployment: "false" +CDuser-attributes-service-INT.NA-PreProd: +- name: CD_user-attributes-service INT +- tag: user-attributes-service +- mzId: CD_user-attributes-service/management-zone/CDuser-attributes-service.id +- env: INT +- skipDeployment: "false" +CDuser-attributes-service-INT.CN-PreProd: +- name: CD_user-attributes-service INT +- tag: user-attributes-service +- mzId: CD_user-attributes-service/management-zone/CDuser-attributes-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-attributes-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_user-attributes-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-attributes-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-attributes-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_user-attributes-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-attributes-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-attributes-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_user-attributes-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-attributes-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-attributes-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_user-attributes-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-attributes-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-attributes-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_user-attributes-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-attributes-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-attributes-service/dashboard/README.md b/BMW-Dynatrace-config/CD_user-attributes-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-attributes-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-attributes-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_user-attributes-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..0203ffc8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-attributes-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDuser-attributes-service-PROD-E2E: defaultPRODE2E.json +- CDuser-attributes-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDuser-attributes-service-PROD-E2E: +- name: CD_user-attributes-service PROD +- mzName: CD_user-attributes-service/management-zone/CDuser-attributes-service.name +- mzId: CD_user-attributes-service/management-zone/CDuser-attributes-service.id +- skipDeployment: "true" +#Configuration +CDuser-attributes-service-PROD-E2E.EMEA-Prod: +- name: CD_user-attributes-service PROD +- mzName: CD_user-attributes-service/management-zone/CDuser-attributes-service.name +- mzId: CD_user-attributes-service/management-zone/CDuser-attributes-service.id +- tag: user-attributes-service +- skipDeployment: "false" +CDuser-attributes-service-PROD-E2E.NA-Prod: +- name: CD_user-attributes-service PROD +- mzName: CD_user-attributes-service/management-zone/CDuser-attributes-service.name +- mzId: CD_user-attributes-service/management-zone/CDuser-attributes-service.id +- tag: user-attributes-service +- skipDeployment: "false" +CDuser-attributes-service-PROD-E2E.CN-Prod: +- name: CD_user-attributes-service PROD +- mzName: CD_user-attributes-service/management-zone/CDuser-attributes-service.name +- mzId: CD_user-attributes-service/management-zone/CDuser-attributes-service.id +- tag: user-attributes-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDuser-attributes-service-INT-TEST: +- name: CD_user-attributes-service INT-TEST +- mzName: CD_user-attributes-service/management-zone/CDuser-attributes-service.name +- mzId: CD_user-attributes-service/management-zone/CDuser-attributes-service.id +- tag: user-attributes-service +- skipDeployment: "true" +#Configuration +CDuser-attributes-service-INT-TEST.EMEA-PreProd: +- name: CD_user-attributes-service INT-TEST +- mzName: CD_user-attributes-service/management-zone/CDuser-attributes-service.name +- mzId: CD_user-attributes-service/management-zone/CDuser-attributes-service.id +- tag: user-attributes-service +- skipDeployment: "false" +CDuser-attributes-service-INT-TEST.NA-PreProd: +- name: CD_user-attributes-service INT-TEST +- mzName: CD_user-attributes-service/management-zone/CDuser-attributes-service.name +- mzId: CD_user-attributes-service/management-zone/CDuser-attributes-service.id +- env: INT +- skipDeployment: "false" +CDuser-attributes-service-INT-TEST.CN-PreProd: +- name: CD_user-attributes-service INT-TEST +- mzName: CD_user-attributes-service/management-zone/CDuser-attributes-service.name +- mzId: CD_user-attributes-service/management-zone/CDuser-attributes-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-attributes-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_user-attributes-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-attributes-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-attributes-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_user-attributes-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-attributes-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-attributes-service/management-zone/README.md b/BMW-Dynatrace-config/CD_user-attributes-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-attributes-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_user-attributes-service/management-zone/default.json b/BMW-Dynatrace-config/CD_user-attributes-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-attributes-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-attributes-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_user-attributes-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..ef2b5396 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-attributes-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDuser-attributes-service: default.json + +CDuser-attributes-service: +- name: CD_user-attributes-service +- tag: user-attributes-service diff --git a/BMW-Dynatrace-config/CD_user-attributes-service/notification/README.md b/BMW-Dynatrace-config/CD_user-attributes-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-attributes-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-attributes-service/notification/email.json b/BMW-Dynatrace-config/CD_user-attributes-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-attributes-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-attributes-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_user-attributes-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-attributes-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-attributes-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_user-attributes-service/notification/notification.yaml new file mode 100644 index 00000000..da9b3978 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-attributes-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDuser-attributes-service-PROD: msTeams.json +- CDuser-attributes-service-E2E: msTeams.json +- CDuser-attributes-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDuser-attributes-service-PROD: +- name: CD_user-attributes-service PROD +- alertingProfile: CD_user-attributes-service/alerting-profile/CDuser-attributes-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDuser-attributes-service-PROD.EMEA-Prod: +- name: CD_user-attributes-service PROD +- alertingProfile: CD_user-attributes-service/alerting-profile/CDuser-attributes-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDuser-attributes-service-PROD.NA-Prod: +- name: CD_user-attributes-service PROD +- alertingProfile: CD_user-attributes-service/alerting-profile/CDuser-attributes-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDuser-attributes-service-PROD.CN-Prod: +- name: CD_user-attributes-service PROD +- alertingProfile: CD_user-attributes-service/alerting-profile/CDuser-attributes-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDuser-attributes-service-E2E: +- name: CD_user-attributes-service E2E +- alertingProfile: CD_user-attributes-service/alerting-profile/CDuser-attributes-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDuser-attributes-service-E2E.EMEA-Prod: +- name: CD_user-attributes-service E2E +- alertingProfile: CD_user-attributes-service/alerting-profile/CDuser-attributes-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDuser-attributes-service-E2E.NA-Prod: +- name: CD_user-attributes-service E2E +- alertingProfile: CD_user-attributes-service/alerting-profile/CDuser-attributes-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDuser-attributes-service-E2E.CN-Prod: +- name: CD_user-attributes-service E2E +- alertingProfile: CD_user-attributes-service/alerting-profile/CDuser-attributes-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDuser-attributes-service-INT: +- name: CD_user-attributes-service INT +- alertingProfile: CD_user-attributes-service/alerting-profile/CDuser-attributes-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDuser-attributes-service-INT.EMEA-PreProd: +- name: CD_user-attributes-service INT +- alertingProfile: CD_user-attributes-service/alerting-profile/CDuser-attributes-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDuser-attributes-service-INT.NA-PreProd: +- name: CD_user-attributes-service INT +- alertingProfile: CD_user-attributes-service/alerting-profile/CDuser-attributes-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDuser-attributes-service-INT.CN-PreProd: +- name: CD_user-attributes-service INT +- alertingProfile: CD_user-attributes-service/alerting-profile/CDuser-attributes-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-attributes-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_user-attributes-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-attributes-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-attributes-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_user-attributes-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-attributes-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-attributes-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_user-attributes-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..f371a7ff --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-attributes-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- user-attributes-service: default.json + +user-attributes-service: +- name: CD_user-attributes-service - +- mzName: CD_user-attributes-service/management-zone/CDuser-attributes-service.name +- mzId: CD_user-attributes-service/management-zone/CDuser-attributes-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-composite-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_user-composite-service/alerting-profile/alerting-profile.yaml index ac177ac1..433239da 100644 --- a/BMW-Dynatrace-config/CD_user-composite-service/alerting-profile/alerting-profile.yaml +++ b/BMW-Dynatrace-config/CD_user-composite-service/alerting-profile/alerting-profile.yaml @@ -1,6 +1,88 @@ -CDuser-composite-service: -- name: CD_user-composite-service/management-zone/CDuser-composite-service.name +config: +- CDuser-composite-service-PROD: default.json +- CDuser-composite-service-E2E: default.json +- CDuser-composite-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDuser-composite-service-PROD: +- name: CD_user-composite-service PROD - tag: user-composite-service - mzId: CD_user-composite-service/management-zone/CDuser-composite-service.id -config: -- CDuser-composite-service: user-composite-service.json +- env: PROD +- skipDeployment: "true" +#Configuration +CDuser-composite-service-PROD.EMEA-Prod: +- name: CD_user-composite-service PROD +- tag: user-composite-service +- mzId: CD_user-composite-service/management-zone/CDuser-composite-service.id +- env: PROD +- skipDeployment: "false" +CDuser-composite-service-PROD.NA-Prod: +- name: CD_user-composite-service PROD +- tag: user-composite-service +- mzId: CD_user-composite-service/management-zone/CDuser-composite-service.id +- env: PROD +- skipDeployment: "false" +CDuser-composite-service-PROD.CN-Prod: +- name: CD_user-composite-service PROD +- tag: user-composite-service +- mzId: CD_user-composite-service/management-zone/CDuser-composite-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDuser-composite-service-E2E: +- name: CD_user-composite-service E2E +- tag: user-composite-service +- mzId: CD_user-composite-service/management-zone/CDuser-composite-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDuser-composite-service-E2E.EMEA-Prod: +- name: CD_user-composite-service E2E +- tag: user-composite-service +- mzId: CD_user-composite-service/management-zone/CDuser-composite-service.id +- env: E2E +- skipDeployment: "false" +CDuser-composite-service-E2E.NA-Prod: +- name: CD_user-composite-service E2E +- tag: user-composite-service +- mzId: CD_user-composite-service/management-zone/CDuser-composite-service.id +- env: E2E +- skipDeployment: "false" +CDuser-composite-service-E2E.CN-Prod: +- name: CD_user-composite-service E2E +- tag: user-composite-service +- mzId: CD_user-composite-service/management-zone/CDuser-composite-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDuser-composite-service-INT: +- name: CD_user-composite-service INT +- tag: user-composite-service +- mzId: CD_user-composite-service/management-zone/CDuser-composite-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDuser-composite-service-INT.EMEA-PreProd: +- name: CD_user-composite-service INT +- tag: user-composite-service +- mzId: CD_user-composite-service/management-zone/CDuser-composite-service.id +- env: INT +- skipDeployment: "false" +CDuser-composite-service-INT.NA-PreProd: +- name: CD_user-composite-service INT +- tag: user-composite-service +- mzId: CD_user-composite-service/management-zone/CDuser-composite-service.id +- env: INT +- skipDeployment: "false" +CDuser-composite-service-INT.CN-PreProd: +- name: CD_user-composite-service INT +- tag: user-composite-service +- mzId: CD_user-composite-service/management-zone/CDuser-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-composite-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_user-composite-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-composite-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-composite-service/alerting-profile/user-composite-service.json b/BMW-Dynatrace-config/CD_user-composite-service/alerting-profile/user-composite-service.json deleted file mode 100644 index d10ad44a..00000000 --- a/BMW-Dynatrace-config/CD_user-composite-service/alerting-profile/user-composite-service.json +++ /dev/null @@ -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}}" - } - ] - } - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-composite-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_user-composite-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-composite-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-composite-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_user-composite-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-composite-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-composite-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_user-composite-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-composite-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-composite-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_user-composite-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-composite-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-composite-service/dashboard/README.md b/BMW-Dynatrace-config/CD_user-composite-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-composite-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-composite-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_user-composite-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..ab819cd8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-composite-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDuser-composite-service-PROD-E2E: defaultPRODE2E.json +- CDuser-composite-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDuser-composite-service-PROD-E2E: +- name: CD_user-composite-service PROD +- mzName: CD_user-composite-service/management-zone/CDuser-composite-service.name +- mzId: CD_user-composite-service/management-zone/CDuser-composite-service.id +- skipDeployment: "true" +#Configuration +CDuser-composite-service-PROD-E2E.EMEA-Prod: +- name: CD_user-composite-service PROD +- mzName: CD_user-composite-service/management-zone/CDuser-composite-service.name +- mzId: CD_user-composite-service/management-zone/CDuser-composite-service.id +- tag: user-composite-service +- skipDeployment: "false" +CDuser-composite-service-PROD-E2E.NA-Prod: +- name: CD_user-composite-service PROD +- mzName: CD_user-composite-service/management-zone/CDuser-composite-service.name +- mzId: CD_user-composite-service/management-zone/CDuser-composite-service.id +- tag: user-composite-service +- skipDeployment: "false" +CDuser-composite-service-PROD-E2E.CN-Prod: +- name: CD_user-composite-service PROD +- mzName: CD_user-composite-service/management-zone/CDuser-composite-service.name +- mzId: CD_user-composite-service/management-zone/CDuser-composite-service.id +- tag: user-composite-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDuser-composite-service-INT-TEST: +- name: CD_user-composite-service INT-TEST +- mzName: CD_user-composite-service/management-zone/CDuser-composite-service.name +- mzId: CD_user-composite-service/management-zone/CDuser-composite-service.id +- tag: user-composite-service +- skipDeployment: "true" +#Configuration +CDuser-composite-service-INT-TEST.EMEA-PreProd: +- name: CD_user-composite-service INT-TEST +- mzName: CD_user-composite-service/management-zone/CDuser-composite-service.name +- mzId: CD_user-composite-service/management-zone/CDuser-composite-service.id +- tag: user-composite-service +- skipDeployment: "false" +CDuser-composite-service-INT-TEST.NA-PreProd: +- name: CD_user-composite-service INT-TEST +- mzName: CD_user-composite-service/management-zone/CDuser-composite-service.name +- mzId: CD_user-composite-service/management-zone/CDuser-composite-service.id +- env: INT +- skipDeployment: "false" +CDuser-composite-service-INT-TEST.CN-PreProd: +- name: CD_user-composite-service INT-TEST +- mzName: CD_user-composite-service/management-zone/CDuser-composite-service.name +- mzId: CD_user-composite-service/management-zone/CDuser-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-composite-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_user-composite-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-composite-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-composite-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_user-composite-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-composite-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-composite-service/management-zone/CDuser-composite-service.json b/BMW-Dynatrace-config/CD_user-composite-service/management-zone/CDuser-composite-service.json deleted file mode 100644 index b2a9367b..00000000 --- a/BMW-Dynatrace-config/CD_user-composite-service/management-zone/CDuser-composite-service.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "dimensionalRules": [], - "name": "{{.name}}", - "rules": [ - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "{{.tag}}" - } - }, - "key": { - "attribute": "SERVICE_TAGS" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "HealthResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PingResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PrometheusResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - } - ], - "enabled": true, - "propagationTypes": [ - "SERVICE_TO_PROCESS_GROUP_LIKE", - "SERVICE_TO_HOST_LIKE" - ], - "type": "SERVICE" - }, - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "{{.tag}}" - } - }, - "key": { - "attribute": "PROCESS_GROUP_TAGS" - } - } - ], - "enabled": true, - "propagationTypes": [ - "PROCESS_GROUP_TO_HOST" - ], - "type": "PROCESS_GROUP" - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-composite-service/management-zone/README.md b/BMW-Dynatrace-config/CD_user-composite-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-composite-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_user-composite-service/management-zone/default.json b/BMW-Dynatrace-config/CD_user-composite-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-composite-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-composite-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_user-composite-service/management-zone/management-zone.yaml index ee46435e..efdd979c 100644 --- a/BMW-Dynatrace-config/CD_user-composite-service/management-zone/management-zone.yaml +++ b/BMW-Dynatrace-config/CD_user-composite-service/management-zone/management-zone.yaml @@ -1,20 +1,6 @@ -CDuser-composite-service.CN-PreProd: -- name: CD_user-composite-service -- tag: user-composite-service -CDuser-composite-service.CN-Prod: -- name: CD_user-composite-service -- tag: user-composite-service -CDuser-composite-service.EMEA-PreProd: -- name: CD_user-composite-service -- tag: user-composite-service -CDuser-composite-service.EMEA-Prod: -- name: CD_user-composite-service -- tag: user-composite-service -CDuser-composite-service.NA-PreProd: -- name: CD_user-composite-service -- tag: user-composite-service -CDuser-composite-service.NA-Prod: -- name: CD_user-composite-service -- tag: user-composite-service config: -- CDuser-composite-service: CDuser-composite-service.json +- CDuser-composite-service: default.json + +CDuser-composite-service: +- name: CD_user-composite-service +- tag: user-composite-service diff --git a/BMW-Dynatrace-config/CD_user-composite-service/notification/README.md b/BMW-Dynatrace-config/CD_user-composite-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-composite-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-composite-service/notification/email.json b/BMW-Dynatrace-config/CD_user-composite-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-composite-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-composite-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_user-composite-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-composite-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-composite-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_user-composite-service/notification/notification.yaml new file mode 100644 index 00000000..1c901535 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-composite-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDuser-composite-service-PROD: msTeams.json +- CDuser-composite-service-E2E: msTeams.json +- CDuser-composite-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDuser-composite-service-PROD: +- name: CD_user-composite-service PROD +- alertingProfile: CD_user-composite-service/alerting-profile/CDuser-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDuser-composite-service-PROD.EMEA-Prod: +- name: CD_user-composite-service PROD +- alertingProfile: CD_user-composite-service/alerting-profile/CDuser-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDuser-composite-service-PROD.NA-Prod: +- name: CD_user-composite-service PROD +- alertingProfile: CD_user-composite-service/alerting-profile/CDuser-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDuser-composite-service-PROD.CN-Prod: +- name: CD_user-composite-service PROD +- alertingProfile: CD_user-composite-service/alerting-profile/CDuser-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDuser-composite-service-E2E: +- name: CD_user-composite-service E2E +- alertingProfile: CD_user-composite-service/alerting-profile/CDuser-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDuser-composite-service-E2E.EMEA-Prod: +- name: CD_user-composite-service E2E +- alertingProfile: CD_user-composite-service/alerting-profile/CDuser-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDuser-composite-service-E2E.NA-Prod: +- name: CD_user-composite-service E2E +- alertingProfile: CD_user-composite-service/alerting-profile/CDuser-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDuser-composite-service-E2E.CN-Prod: +- name: CD_user-composite-service E2E +- alertingProfile: CD_user-composite-service/alerting-profile/CDuser-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDuser-composite-service-INT: +- name: CD_user-composite-service INT +- alertingProfile: CD_user-composite-service/alerting-profile/CDuser-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDuser-composite-service-INT.EMEA-PreProd: +- name: CD_user-composite-service INT +- alertingProfile: CD_user-composite-service/alerting-profile/CDuser-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDuser-composite-service-INT.NA-PreProd: +- name: CD_user-composite-service INT +- alertingProfile: CD_user-composite-service/alerting-profile/CDuser-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDuser-composite-service-INT.CN-PreProd: +- name: CD_user-composite-service INT +- alertingProfile: CD_user-composite-service/alerting-profile/CDuser-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-composite-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_user-composite-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-composite-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-composite-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_user-composite-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-composite-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-composite-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_user-composite-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..d9f56ede --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-composite-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- user-composite-service: default.json + +user-composite-service: +- name: CD_user-composite-service - +- mzName: CD_user-composite-service/management-zone/CDuser-composite-service.name +- mzId: CD_user-composite-service/management-zone/CDuser-composite-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-delete-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_user-delete-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..1c807f89 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-delete-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDuser-delete-service-PROD: default.json +- CDuser-delete-service-E2E: default.json +- CDuser-delete-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDuser-delete-service-PROD: +- name: CD_user-delete-service PROD +- tag: user-delete-service +- mzId: CD_user-delete-service/management-zone/CDuser-delete-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDuser-delete-service-PROD.EMEA-Prod: +- name: CD_user-delete-service PROD +- tag: user-delete-service +- mzId: CD_user-delete-service/management-zone/CDuser-delete-service.id +- env: PROD +- skipDeployment: "false" +CDuser-delete-service-PROD.NA-Prod: +- name: CD_user-delete-service PROD +- tag: user-delete-service +- mzId: CD_user-delete-service/management-zone/CDuser-delete-service.id +- env: PROD +- skipDeployment: "false" +CDuser-delete-service-PROD.CN-Prod: +- name: CD_user-delete-service PROD +- tag: user-delete-service +- mzId: CD_user-delete-service/management-zone/CDuser-delete-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDuser-delete-service-E2E: +- name: CD_user-delete-service E2E +- tag: user-delete-service +- mzId: CD_user-delete-service/management-zone/CDuser-delete-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDuser-delete-service-E2E.EMEA-Prod: +- name: CD_user-delete-service E2E +- tag: user-delete-service +- mzId: CD_user-delete-service/management-zone/CDuser-delete-service.id +- env: E2E +- skipDeployment: "false" +CDuser-delete-service-E2E.NA-Prod: +- name: CD_user-delete-service E2E +- tag: user-delete-service +- mzId: CD_user-delete-service/management-zone/CDuser-delete-service.id +- env: E2E +- skipDeployment: "false" +CDuser-delete-service-E2E.CN-Prod: +- name: CD_user-delete-service E2E +- tag: user-delete-service +- mzId: CD_user-delete-service/management-zone/CDuser-delete-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDuser-delete-service-INT: +- name: CD_user-delete-service INT +- tag: user-delete-service +- mzId: CD_user-delete-service/management-zone/CDuser-delete-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDuser-delete-service-INT.EMEA-PreProd: +- name: CD_user-delete-service INT +- tag: user-delete-service +- mzId: CD_user-delete-service/management-zone/CDuser-delete-service.id +- env: INT +- skipDeployment: "false" +CDuser-delete-service-INT.NA-PreProd: +- name: CD_user-delete-service INT +- tag: user-delete-service +- mzId: CD_user-delete-service/management-zone/CDuser-delete-service.id +- env: INT +- skipDeployment: "false" +CDuser-delete-service-INT.CN-PreProd: +- name: CD_user-delete-service INT +- tag: user-delete-service +- mzId: CD_user-delete-service/management-zone/CDuser-delete-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-delete-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_user-delete-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-delete-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-delete-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_user-delete-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-delete-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-delete-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_user-delete-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-delete-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-delete-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_user-delete-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-delete-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-delete-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_user-delete-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-delete-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-delete-service/dashboard/README.md b/BMW-Dynatrace-config/CD_user-delete-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-delete-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-delete-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_user-delete-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..5e95a8bc --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-delete-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDuser-delete-service-PROD-E2E: defaultPRODE2E.json +- CDuser-delete-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDuser-delete-service-PROD-E2E: +- name: CD_user-delete-service PROD +- mzName: CD_user-delete-service/management-zone/CDuser-delete-service.name +- mzId: CD_user-delete-service/management-zone/CDuser-delete-service.id +- skipDeployment: "true" +#Configuration +CDuser-delete-service-PROD-E2E.EMEA-Prod: +- name: CD_user-delete-service PROD +- mzName: CD_user-delete-service/management-zone/CDuser-delete-service.name +- mzId: CD_user-delete-service/management-zone/CDuser-delete-service.id +- tag: user-delete-service +- skipDeployment: "false" +CDuser-delete-service-PROD-E2E.NA-Prod: +- name: CD_user-delete-service PROD +- mzName: CD_user-delete-service/management-zone/CDuser-delete-service.name +- mzId: CD_user-delete-service/management-zone/CDuser-delete-service.id +- tag: user-delete-service +- skipDeployment: "false" +CDuser-delete-service-PROD-E2E.CN-Prod: +- name: CD_user-delete-service PROD +- mzName: CD_user-delete-service/management-zone/CDuser-delete-service.name +- mzId: CD_user-delete-service/management-zone/CDuser-delete-service.id +- tag: user-delete-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDuser-delete-service-INT-TEST: +- name: CD_user-delete-service INT-TEST +- mzName: CD_user-delete-service/management-zone/CDuser-delete-service.name +- mzId: CD_user-delete-service/management-zone/CDuser-delete-service.id +- tag: user-delete-service +- skipDeployment: "true" +#Configuration +CDuser-delete-service-INT-TEST.EMEA-PreProd: +- name: CD_user-delete-service INT-TEST +- mzName: CD_user-delete-service/management-zone/CDuser-delete-service.name +- mzId: CD_user-delete-service/management-zone/CDuser-delete-service.id +- tag: user-delete-service +- skipDeployment: "false" +CDuser-delete-service-INT-TEST.NA-PreProd: +- name: CD_user-delete-service INT-TEST +- mzName: CD_user-delete-service/management-zone/CDuser-delete-service.name +- mzId: CD_user-delete-service/management-zone/CDuser-delete-service.id +- env: INT +- skipDeployment: "false" +CDuser-delete-service-INT-TEST.CN-PreProd: +- name: CD_user-delete-service INT-TEST +- mzName: CD_user-delete-service/management-zone/CDuser-delete-service.name +- mzId: CD_user-delete-service/management-zone/CDuser-delete-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-delete-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_user-delete-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-delete-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-delete-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_user-delete-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-delete-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-delete-service/management-zone/README.md b/BMW-Dynatrace-config/CD_user-delete-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-delete-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_user-delete-service/management-zone/default.json b/BMW-Dynatrace-config/CD_user-delete-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-delete-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-delete-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_user-delete-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..e1e8bf87 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-delete-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDuser-delete-service: default.json + +CDuser-delete-service: +- name: CD_user-delete-service +- tag: user-delete-service diff --git a/BMW-Dynatrace-config/CD_user-delete-service/notification/README.md b/BMW-Dynatrace-config/CD_user-delete-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-delete-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-delete-service/notification/email.json b/BMW-Dynatrace-config/CD_user-delete-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-delete-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-delete-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_user-delete-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-delete-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-delete-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_user-delete-service/notification/notification.yaml new file mode 100644 index 00000000..6ddb5d8e --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-delete-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDuser-delete-service-PROD: msTeams.json +- CDuser-delete-service-E2E: msTeams.json +- CDuser-delete-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDuser-delete-service-PROD: +- name: CD_user-delete-service PROD +- alertingProfile: CD_user-delete-service/alerting-profile/CDuser-delete-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDuser-delete-service-PROD.EMEA-Prod: +- name: CD_user-delete-service PROD +- alertingProfile: CD_user-delete-service/alerting-profile/CDuser-delete-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDuser-delete-service-PROD.NA-Prod: +- name: CD_user-delete-service PROD +- alertingProfile: CD_user-delete-service/alerting-profile/CDuser-delete-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDuser-delete-service-PROD.CN-Prod: +- name: CD_user-delete-service PROD +- alertingProfile: CD_user-delete-service/alerting-profile/CDuser-delete-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDuser-delete-service-E2E: +- name: CD_user-delete-service E2E +- alertingProfile: CD_user-delete-service/alerting-profile/CDuser-delete-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDuser-delete-service-E2E.EMEA-Prod: +- name: CD_user-delete-service E2E +- alertingProfile: CD_user-delete-service/alerting-profile/CDuser-delete-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDuser-delete-service-E2E.NA-Prod: +- name: CD_user-delete-service E2E +- alertingProfile: CD_user-delete-service/alerting-profile/CDuser-delete-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDuser-delete-service-E2E.CN-Prod: +- name: CD_user-delete-service E2E +- alertingProfile: CD_user-delete-service/alerting-profile/CDuser-delete-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDuser-delete-service-INT: +- name: CD_user-delete-service INT +- alertingProfile: CD_user-delete-service/alerting-profile/CDuser-delete-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDuser-delete-service-INT.EMEA-PreProd: +- name: CD_user-delete-service INT +- alertingProfile: CD_user-delete-service/alerting-profile/CDuser-delete-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDuser-delete-service-INT.NA-PreProd: +- name: CD_user-delete-service INT +- alertingProfile: CD_user-delete-service/alerting-profile/CDuser-delete-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDuser-delete-service-INT.CN-PreProd: +- name: CD_user-delete-service INT +- alertingProfile: CD_user-delete-service/alerting-profile/CDuser-delete-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-delete-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_user-delete-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-delete-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-delete-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_user-delete-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-delete-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-delete-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_user-delete-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..f6223cbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-delete-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- user-delete-service: default.json + +user-delete-service: +- name: CD_user-delete-service - +- mzName: CD_user-delete-service/management-zone/CDuser-delete-service.name +- mzId: CD_user-delete-service/management-zone/CDuser-delete-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-position-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_user-position-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..39d02c7e --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-position-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDuser-position-service-PROD: default.json +- CDuser-position-service-E2E: default.json +- CDuser-position-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDuser-position-service-PROD: +- name: CD_user-position-service PROD +- tag: user-position-service +- mzId: CD_user-position-service/management-zone/CDuser-position-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDuser-position-service-PROD.EMEA-Prod: +- name: CD_user-position-service PROD +- tag: user-position-service +- mzId: CD_user-position-service/management-zone/CDuser-position-service.id +- env: PROD +- skipDeployment: "false" +CDuser-position-service-PROD.NA-Prod: +- name: CD_user-position-service PROD +- tag: user-position-service +- mzId: CD_user-position-service/management-zone/CDuser-position-service.id +- env: PROD +- skipDeployment: "false" +CDuser-position-service-PROD.CN-Prod: +- name: CD_user-position-service PROD +- tag: user-position-service +- mzId: CD_user-position-service/management-zone/CDuser-position-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDuser-position-service-E2E: +- name: CD_user-position-service E2E +- tag: user-position-service +- mzId: CD_user-position-service/management-zone/CDuser-position-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDuser-position-service-E2E.EMEA-Prod: +- name: CD_user-position-service E2E +- tag: user-position-service +- mzId: CD_user-position-service/management-zone/CDuser-position-service.id +- env: E2E +- skipDeployment: "false" +CDuser-position-service-E2E.NA-Prod: +- name: CD_user-position-service E2E +- tag: user-position-service +- mzId: CD_user-position-service/management-zone/CDuser-position-service.id +- env: E2E +- skipDeployment: "false" +CDuser-position-service-E2E.CN-Prod: +- name: CD_user-position-service E2E +- tag: user-position-service +- mzId: CD_user-position-service/management-zone/CDuser-position-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDuser-position-service-INT: +- name: CD_user-position-service INT +- tag: user-position-service +- mzId: CD_user-position-service/management-zone/CDuser-position-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDuser-position-service-INT.EMEA-PreProd: +- name: CD_user-position-service INT +- tag: user-position-service +- mzId: CD_user-position-service/management-zone/CDuser-position-service.id +- env: INT +- skipDeployment: "false" +CDuser-position-service-INT.NA-PreProd: +- name: CD_user-position-service INT +- tag: user-position-service +- mzId: CD_user-position-service/management-zone/CDuser-position-service.id +- env: INT +- skipDeployment: "false" +CDuser-position-service-INT.CN-PreProd: +- name: CD_user-position-service INT +- tag: user-position-service +- mzId: CD_user-position-service/management-zone/CDuser-position-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-position-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_user-position-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-position-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-position-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_user-position-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-position-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-position-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_user-position-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-position-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-position-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_user-position-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-position-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-position-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_user-position-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-position-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-position-service/dashboard/README.md b/BMW-Dynatrace-config/CD_user-position-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-position-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-position-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_user-position-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..a1b36ee7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-position-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDuser-position-service-PROD-E2E: defaultPRODE2E.json +- CDuser-position-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDuser-position-service-PROD-E2E: +- name: CD_user-position-service PROD +- mzName: CD_user-position-service/management-zone/CDuser-position-service.name +- mzId: CD_user-position-service/management-zone/CDuser-position-service.id +- skipDeployment: "true" +#Configuration +CDuser-position-service-PROD-E2E.EMEA-Prod: +- name: CD_user-position-service PROD +- mzName: CD_user-position-service/management-zone/CDuser-position-service.name +- mzId: CD_user-position-service/management-zone/CDuser-position-service.id +- tag: user-position-service +- skipDeployment: "false" +CDuser-position-service-PROD-E2E.NA-Prod: +- name: CD_user-position-service PROD +- mzName: CD_user-position-service/management-zone/CDuser-position-service.name +- mzId: CD_user-position-service/management-zone/CDuser-position-service.id +- tag: user-position-service +- skipDeployment: "false" +CDuser-position-service-PROD-E2E.CN-Prod: +- name: CD_user-position-service PROD +- mzName: CD_user-position-service/management-zone/CDuser-position-service.name +- mzId: CD_user-position-service/management-zone/CDuser-position-service.id +- tag: user-position-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDuser-position-service-INT-TEST: +- name: CD_user-position-service INT-TEST +- mzName: CD_user-position-service/management-zone/CDuser-position-service.name +- mzId: CD_user-position-service/management-zone/CDuser-position-service.id +- tag: user-position-service +- skipDeployment: "true" +#Configuration +CDuser-position-service-INT-TEST.EMEA-PreProd: +- name: CD_user-position-service INT-TEST +- mzName: CD_user-position-service/management-zone/CDuser-position-service.name +- mzId: CD_user-position-service/management-zone/CDuser-position-service.id +- tag: user-position-service +- skipDeployment: "false" +CDuser-position-service-INT-TEST.NA-PreProd: +- name: CD_user-position-service INT-TEST +- mzName: CD_user-position-service/management-zone/CDuser-position-service.name +- mzId: CD_user-position-service/management-zone/CDuser-position-service.id +- env: INT +- skipDeployment: "false" +CDuser-position-service-INT-TEST.CN-PreProd: +- name: CD_user-position-service INT-TEST +- mzName: CD_user-position-service/management-zone/CDuser-position-service.name +- mzId: CD_user-position-service/management-zone/CDuser-position-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-position-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_user-position-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-position-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-position-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_user-position-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-position-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-position-service/management-zone/README.md b/BMW-Dynatrace-config/CD_user-position-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-position-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_user-position-service/management-zone/default.json b/BMW-Dynatrace-config/CD_user-position-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-position-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-position-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_user-position-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..c7190ce6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-position-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDuser-position-service: default.json + +CDuser-position-service: +- name: CD_user-position-service +- tag: user-position-service diff --git a/BMW-Dynatrace-config/CD_user-position-service/notification/README.md b/BMW-Dynatrace-config/CD_user-position-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-position-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-position-service/notification/email.json b/BMW-Dynatrace-config/CD_user-position-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-position-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-position-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_user-position-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-position-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-position-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_user-position-service/notification/notification.yaml new file mode 100644 index 00000000..e83a6a05 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-position-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDuser-position-service-PROD: msTeams.json +- CDuser-position-service-E2E: msTeams.json +- CDuser-position-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDuser-position-service-PROD: +- name: CD_user-position-service PROD +- alertingProfile: CD_user-position-service/alerting-profile/CDuser-position-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDuser-position-service-PROD.EMEA-Prod: +- name: CD_user-position-service PROD +- alertingProfile: CD_user-position-service/alerting-profile/CDuser-position-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDuser-position-service-PROD.NA-Prod: +- name: CD_user-position-service PROD +- alertingProfile: CD_user-position-service/alerting-profile/CDuser-position-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDuser-position-service-PROD.CN-Prod: +- name: CD_user-position-service PROD +- alertingProfile: CD_user-position-service/alerting-profile/CDuser-position-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDuser-position-service-E2E: +- name: CD_user-position-service E2E +- alertingProfile: CD_user-position-service/alerting-profile/CDuser-position-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDuser-position-service-E2E.EMEA-Prod: +- name: CD_user-position-service E2E +- alertingProfile: CD_user-position-service/alerting-profile/CDuser-position-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDuser-position-service-E2E.NA-Prod: +- name: CD_user-position-service E2E +- alertingProfile: CD_user-position-service/alerting-profile/CDuser-position-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDuser-position-service-E2E.CN-Prod: +- name: CD_user-position-service E2E +- alertingProfile: CD_user-position-service/alerting-profile/CDuser-position-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDuser-position-service-INT: +- name: CD_user-position-service INT +- alertingProfile: CD_user-position-service/alerting-profile/CDuser-position-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDuser-position-service-INT.EMEA-PreProd: +- name: CD_user-position-service INT +- alertingProfile: CD_user-position-service/alerting-profile/CDuser-position-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDuser-position-service-INT.NA-PreProd: +- name: CD_user-position-service INT +- alertingProfile: CD_user-position-service/alerting-profile/CDuser-position-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDuser-position-service-INT.CN-PreProd: +- name: CD_user-position-service INT +- alertingProfile: CD_user-position-service/alerting-profile/CDuser-position-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-position-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_user-position-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-position-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-position-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_user-position-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-position-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-position-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_user-position-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..e4979141 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-position-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- user-position-service: default.json + +user-position-service: +- name: CD_user-position-service - +- mzName: CD_user-position-service/management-zone/CDuser-position-service.name +- mzId: CD_user-position-service/management-zone/CDuser-position-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-profile-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_user-profile-service/alerting-profile/alerting-profile.yaml index 7bff507f..5894d26d 100644 --- a/BMW-Dynatrace-config/CD_user-profile-service/alerting-profile/alerting-profile.yaml +++ b/BMW-Dynatrace-config/CD_user-profile-service/alerting-profile/alerting-profile.yaml @@ -1,6 +1,88 @@ -CDuser-profile-service: -- name: CD_user-profile-service/management-zone/CDuser-profile-service.name +config: +- CDuser-profile-service-PROD: default.json +- CDuser-profile-service-E2E: default.json +- CDuser-profile-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDuser-profile-service-PROD: +- name: CD_user-profile-service PROD - tag: user-profile-service - mzId: CD_user-profile-service/management-zone/CDuser-profile-service.id -config: -- CDuser-profile-service: user-profile-service.json +- env: PROD +- skipDeployment: "true" +#Configuration +CDuser-profile-service-PROD.EMEA-Prod: +- name: CD_user-profile-service PROD +- tag: user-profile-service +- mzId: CD_user-profile-service/management-zone/CDuser-profile-service.id +- env: PROD +- skipDeployment: "false" +CDuser-profile-service-PROD.NA-Prod: +- name: CD_user-profile-service PROD +- tag: user-profile-service +- mzId: CD_user-profile-service/management-zone/CDuser-profile-service.id +- env: PROD +- skipDeployment: "false" +CDuser-profile-service-PROD.CN-Prod: +- name: CD_user-profile-service PROD +- tag: user-profile-service +- mzId: CD_user-profile-service/management-zone/CDuser-profile-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDuser-profile-service-E2E: +- name: CD_user-profile-service E2E +- tag: user-profile-service +- mzId: CD_user-profile-service/management-zone/CDuser-profile-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDuser-profile-service-E2E.EMEA-Prod: +- name: CD_user-profile-service E2E +- tag: user-profile-service +- mzId: CD_user-profile-service/management-zone/CDuser-profile-service.id +- env: E2E +- skipDeployment: "false" +CDuser-profile-service-E2E.NA-Prod: +- name: CD_user-profile-service E2E +- tag: user-profile-service +- mzId: CD_user-profile-service/management-zone/CDuser-profile-service.id +- env: E2E +- skipDeployment: "false" +CDuser-profile-service-E2E.CN-Prod: +- name: CD_user-profile-service E2E +- tag: user-profile-service +- mzId: CD_user-profile-service/management-zone/CDuser-profile-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDuser-profile-service-INT: +- name: CD_user-profile-service INT +- tag: user-profile-service +- mzId: CD_user-profile-service/management-zone/CDuser-profile-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDuser-profile-service-INT.EMEA-PreProd: +- name: CD_user-profile-service INT +- tag: user-profile-service +- mzId: CD_user-profile-service/management-zone/CDuser-profile-service.id +- env: INT +- skipDeployment: "false" +CDuser-profile-service-INT.NA-PreProd: +- name: CD_user-profile-service INT +- tag: user-profile-service +- mzId: CD_user-profile-service/management-zone/CDuser-profile-service.id +- env: INT +- skipDeployment: "false" +CDuser-profile-service-INT.CN-PreProd: +- name: CD_user-profile-service INT +- tag: user-profile-service +- mzId: CD_user-profile-service/management-zone/CDuser-profile-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-profile-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_user-profile-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-profile-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-profile-service/alerting-profile/user-profile-service.json b/BMW-Dynatrace-config/CD_user-profile-service/alerting-profile/user-profile-service.json deleted file mode 100644 index d10ad44a..00000000 --- a/BMW-Dynatrace-config/CD_user-profile-service/alerting-profile/user-profile-service.json +++ /dev/null @@ -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}}" - } - ] - } - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-profile-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_user-profile-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-profile-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-profile-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_user-profile-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-profile-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-profile-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_user-profile-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-profile-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-profile-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_user-profile-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-profile-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-profile-service/dashboard/README.md b/BMW-Dynatrace-config/CD_user-profile-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-profile-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-profile-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_user-profile-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..03bcd9bb --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-profile-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDuser-profile-service-PROD-E2E: defaultPRODE2E.json +- CDuser-profile-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDuser-profile-service-PROD-E2E: +- name: CD_user-profile-service PROD +- mzName: CD_user-profile-service/management-zone/CDuser-profile-service.name +- mzId: CD_user-profile-service/management-zone/CDuser-profile-service.id +- skipDeployment: "true" +#Configuration +CDuser-profile-service-PROD-E2E.EMEA-Prod: +- name: CD_user-profile-service PROD +- mzName: CD_user-profile-service/management-zone/CDuser-profile-service.name +- mzId: CD_user-profile-service/management-zone/CDuser-profile-service.id +- tag: user-profile-service +- skipDeployment: "false" +CDuser-profile-service-PROD-E2E.NA-Prod: +- name: CD_user-profile-service PROD +- mzName: CD_user-profile-service/management-zone/CDuser-profile-service.name +- mzId: CD_user-profile-service/management-zone/CDuser-profile-service.id +- tag: user-profile-service +- skipDeployment: "false" +CDuser-profile-service-PROD-E2E.CN-Prod: +- name: CD_user-profile-service PROD +- mzName: CD_user-profile-service/management-zone/CDuser-profile-service.name +- mzId: CD_user-profile-service/management-zone/CDuser-profile-service.id +- tag: user-profile-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDuser-profile-service-INT-TEST: +- name: CD_user-profile-service INT-TEST +- mzName: CD_user-profile-service/management-zone/CDuser-profile-service.name +- mzId: CD_user-profile-service/management-zone/CDuser-profile-service.id +- tag: user-profile-service +- skipDeployment: "true" +#Configuration +CDuser-profile-service-INT-TEST.EMEA-PreProd: +- name: CD_user-profile-service INT-TEST +- mzName: CD_user-profile-service/management-zone/CDuser-profile-service.name +- mzId: CD_user-profile-service/management-zone/CDuser-profile-service.id +- tag: user-profile-service +- skipDeployment: "false" +CDuser-profile-service-INT-TEST.NA-PreProd: +- name: CD_user-profile-service INT-TEST +- mzName: CD_user-profile-service/management-zone/CDuser-profile-service.name +- mzId: CD_user-profile-service/management-zone/CDuser-profile-service.id +- env: INT +- skipDeployment: "false" +CDuser-profile-service-INT-TEST.CN-PreProd: +- name: CD_user-profile-service INT-TEST +- mzName: CD_user-profile-service/management-zone/CDuser-profile-service.name +- mzId: CD_user-profile-service/management-zone/CDuser-profile-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-profile-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_user-profile-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-profile-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-profile-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_user-profile-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-profile-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-profile-service/management-zone/CDuser-profile-service.json b/BMW-Dynatrace-config/CD_user-profile-service/management-zone/CDuser-profile-service.json deleted file mode 100644 index b2a9367b..00000000 --- a/BMW-Dynatrace-config/CD_user-profile-service/management-zone/CDuser-profile-service.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "dimensionalRules": [], - "name": "{{.name}}", - "rules": [ - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "{{.tag}}" - } - }, - "key": { - "attribute": "SERVICE_TAGS" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "HealthResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PingResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PrometheusResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - } - ], - "enabled": true, - "propagationTypes": [ - "SERVICE_TO_PROCESS_GROUP_LIKE", - "SERVICE_TO_HOST_LIKE" - ], - "type": "SERVICE" - }, - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "{{.tag}}" - } - }, - "key": { - "attribute": "PROCESS_GROUP_TAGS" - } - } - ], - "enabled": true, - "propagationTypes": [ - "PROCESS_GROUP_TO_HOST" - ], - "type": "PROCESS_GROUP" - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-profile-service/management-zone/README.md b/BMW-Dynatrace-config/CD_user-profile-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-profile-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_user-profile-service/management-zone/default.json b/BMW-Dynatrace-config/CD_user-profile-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-profile-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-profile-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_user-profile-service/management-zone/management-zone.yaml index e35e6b3a..1e62f0c9 100644 --- a/BMW-Dynatrace-config/CD_user-profile-service/management-zone/management-zone.yaml +++ b/BMW-Dynatrace-config/CD_user-profile-service/management-zone/management-zone.yaml @@ -1,20 +1,6 @@ -CDuser-profile-service.CN-PreProd: -- name: CD_user-profile-service -- tag: user-profile-service -CDuser-profile-service.CN-Prod: -- name: CD_user-profile-service -- tag: user-profile-service -CDuser-profile-service.EMEA-PreProd: -- name: CD_user-profile-service -- tag: user-profile-service -CDuser-profile-service.EMEA-Prod: -- name: CD_user-profile-service -- tag: user-profile-service -CDuser-profile-service.NA-PreProd: -- name: CD_user-profile-service -- tag: user-profile-service -CDuser-profile-service.NA-Prod: -- name: CD_user-profile-service -- tag: user-profile-service config: -- CDuser-profile-service: CDuser-profile-service.json +- CDuser-profile-service: default.json + +CDuser-profile-service: +- name: CD_user-profile-service +- tag: user-profile-service diff --git a/BMW-Dynatrace-config/CD_user-profile-service/notification/README.md b/BMW-Dynatrace-config/CD_user-profile-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-profile-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-profile-service/notification/email.json b/BMW-Dynatrace-config/CD_user-profile-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-profile-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-profile-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_user-profile-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-profile-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-profile-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_user-profile-service/notification/notification.yaml new file mode 100644 index 00000000..dc040f27 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-profile-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDuser-profile-service-PROD: msTeams.json +- CDuser-profile-service-E2E: msTeams.json +- CDuser-profile-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDuser-profile-service-PROD: +- name: CD_user-profile-service PROD +- alertingProfile: CD_user-profile-service/alerting-profile/CDuser-profile-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDuser-profile-service-PROD.EMEA-Prod: +- name: CD_user-profile-service PROD +- alertingProfile: CD_user-profile-service/alerting-profile/CDuser-profile-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDuser-profile-service-PROD.NA-Prod: +- name: CD_user-profile-service PROD +- alertingProfile: CD_user-profile-service/alerting-profile/CDuser-profile-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDuser-profile-service-PROD.CN-Prod: +- name: CD_user-profile-service PROD +- alertingProfile: CD_user-profile-service/alerting-profile/CDuser-profile-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDuser-profile-service-E2E: +- name: CD_user-profile-service E2E +- alertingProfile: CD_user-profile-service/alerting-profile/CDuser-profile-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDuser-profile-service-E2E.EMEA-Prod: +- name: CD_user-profile-service E2E +- alertingProfile: CD_user-profile-service/alerting-profile/CDuser-profile-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDuser-profile-service-E2E.NA-Prod: +- name: CD_user-profile-service E2E +- alertingProfile: CD_user-profile-service/alerting-profile/CDuser-profile-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDuser-profile-service-E2E.CN-Prod: +- name: CD_user-profile-service E2E +- alertingProfile: CD_user-profile-service/alerting-profile/CDuser-profile-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDuser-profile-service-INT: +- name: CD_user-profile-service INT +- alertingProfile: CD_user-profile-service/alerting-profile/CDuser-profile-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDuser-profile-service-INT.EMEA-PreProd: +- name: CD_user-profile-service INT +- alertingProfile: CD_user-profile-service/alerting-profile/CDuser-profile-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDuser-profile-service-INT.NA-PreProd: +- name: CD_user-profile-service INT +- alertingProfile: CD_user-profile-service/alerting-profile/CDuser-profile-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDuser-profile-service-INT.CN-PreProd: +- name: CD_user-profile-service INT +- alertingProfile: CD_user-profile-service/alerting-profile/CDuser-profile-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-profile-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_user-profile-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-profile-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-profile-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_user-profile-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-profile-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-profile-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_user-profile-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..a380b9c1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-profile-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- user-profile-service: default.json + +user-profile-service: +- name: CD_user-profile-service - +- mzName: CD_user-profile-service/management-zone/CDuser-profile-service.name +- mzId: CD_user-profile-service/management-zone/CDuser-profile-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_usid-filter-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_usid-filter-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..fd6e2754 --- /dev/null +++ b/BMW-Dynatrace-config/CD_usid-filter-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDusid-filter-service-PROD: default.json +- CDusid-filter-service-E2E: default.json +- CDusid-filter-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDusid-filter-service-PROD: +- name: CD_usid-filter-service PROD +- tag: usid-filter-service +- mzId: CD_usid-filter-service/management-zone/CDusid-filter-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDusid-filter-service-PROD.EMEA-Prod: +- name: CD_usid-filter-service PROD +- tag: usid-filter-service +- mzId: CD_usid-filter-service/management-zone/CDusid-filter-service.id +- env: PROD +- skipDeployment: "false" +CDusid-filter-service-PROD.NA-Prod: +- name: CD_usid-filter-service PROD +- tag: usid-filter-service +- mzId: CD_usid-filter-service/management-zone/CDusid-filter-service.id +- env: PROD +- skipDeployment: "false" +CDusid-filter-service-PROD.CN-Prod: +- name: CD_usid-filter-service PROD +- tag: usid-filter-service +- mzId: CD_usid-filter-service/management-zone/CDusid-filter-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDusid-filter-service-E2E: +- name: CD_usid-filter-service E2E +- tag: usid-filter-service +- mzId: CD_usid-filter-service/management-zone/CDusid-filter-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDusid-filter-service-E2E.EMEA-Prod: +- name: CD_usid-filter-service E2E +- tag: usid-filter-service +- mzId: CD_usid-filter-service/management-zone/CDusid-filter-service.id +- env: E2E +- skipDeployment: "false" +CDusid-filter-service-E2E.NA-Prod: +- name: CD_usid-filter-service E2E +- tag: usid-filter-service +- mzId: CD_usid-filter-service/management-zone/CDusid-filter-service.id +- env: E2E +- skipDeployment: "false" +CDusid-filter-service-E2E.CN-Prod: +- name: CD_usid-filter-service E2E +- tag: usid-filter-service +- mzId: CD_usid-filter-service/management-zone/CDusid-filter-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDusid-filter-service-INT: +- name: CD_usid-filter-service INT +- tag: usid-filter-service +- mzId: CD_usid-filter-service/management-zone/CDusid-filter-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDusid-filter-service-INT.EMEA-PreProd: +- name: CD_usid-filter-service INT +- tag: usid-filter-service +- mzId: CD_usid-filter-service/management-zone/CDusid-filter-service.id +- env: INT +- skipDeployment: "false" +CDusid-filter-service-INT.NA-PreProd: +- name: CD_usid-filter-service INT +- tag: usid-filter-service +- mzId: CD_usid-filter-service/management-zone/CDusid-filter-service.id +- env: INT +- skipDeployment: "false" +CDusid-filter-service-INT.CN-PreProd: +- name: CD_usid-filter-service INT +- tag: usid-filter-service +- mzId: CD_usid-filter-service/management-zone/CDusid-filter-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_usid-filter-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_usid-filter-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_usid-filter-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_usid-filter-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_usid-filter-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_usid-filter-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_usid-filter-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_usid-filter-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_usid-filter-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_usid-filter-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_usid-filter-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_usid-filter-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_usid-filter-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_usid-filter-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_usid-filter-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_usid-filter-service/dashboard/README.md b/BMW-Dynatrace-config/CD_usid-filter-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_usid-filter-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_usid-filter-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_usid-filter-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..49ab26a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_usid-filter-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDusid-filter-service-PROD-E2E: defaultPRODE2E.json +- CDusid-filter-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDusid-filter-service-PROD-E2E: +- name: CD_usid-filter-service PROD +- mzName: CD_usid-filter-service/management-zone/CDusid-filter-service.name +- mzId: CD_usid-filter-service/management-zone/CDusid-filter-service.id +- skipDeployment: "true" +#Configuration +CDusid-filter-service-PROD-E2E.EMEA-Prod: +- name: CD_usid-filter-service PROD +- mzName: CD_usid-filter-service/management-zone/CDusid-filter-service.name +- mzId: CD_usid-filter-service/management-zone/CDusid-filter-service.id +- tag: usid-filter-service +- skipDeployment: "false" +CDusid-filter-service-PROD-E2E.NA-Prod: +- name: CD_usid-filter-service PROD +- mzName: CD_usid-filter-service/management-zone/CDusid-filter-service.name +- mzId: CD_usid-filter-service/management-zone/CDusid-filter-service.id +- tag: usid-filter-service +- skipDeployment: "false" +CDusid-filter-service-PROD-E2E.CN-Prod: +- name: CD_usid-filter-service PROD +- mzName: CD_usid-filter-service/management-zone/CDusid-filter-service.name +- mzId: CD_usid-filter-service/management-zone/CDusid-filter-service.id +- tag: usid-filter-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDusid-filter-service-INT-TEST: +- name: CD_usid-filter-service INT-TEST +- mzName: CD_usid-filter-service/management-zone/CDusid-filter-service.name +- mzId: CD_usid-filter-service/management-zone/CDusid-filter-service.id +- tag: usid-filter-service +- skipDeployment: "true" +#Configuration +CDusid-filter-service-INT-TEST.EMEA-PreProd: +- name: CD_usid-filter-service INT-TEST +- mzName: CD_usid-filter-service/management-zone/CDusid-filter-service.name +- mzId: CD_usid-filter-service/management-zone/CDusid-filter-service.id +- tag: usid-filter-service +- skipDeployment: "false" +CDusid-filter-service-INT-TEST.NA-PreProd: +- name: CD_usid-filter-service INT-TEST +- mzName: CD_usid-filter-service/management-zone/CDusid-filter-service.name +- mzId: CD_usid-filter-service/management-zone/CDusid-filter-service.id +- env: INT +- skipDeployment: "false" +CDusid-filter-service-INT-TEST.CN-PreProd: +- name: CD_usid-filter-service INT-TEST +- mzName: CD_usid-filter-service/management-zone/CDusid-filter-service.name +- mzId: CD_usid-filter-service/management-zone/CDusid-filter-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_usid-filter-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_usid-filter-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_usid-filter-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_usid-filter-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_usid-filter-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_usid-filter-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_usid-filter-service/management-zone/README.md b/BMW-Dynatrace-config/CD_usid-filter-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_usid-filter-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_usid-filter-service/management-zone/default.json b/BMW-Dynatrace-config/CD_usid-filter-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_usid-filter-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_usid-filter-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_usid-filter-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..50d98383 --- /dev/null +++ b/BMW-Dynatrace-config/CD_usid-filter-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDusid-filter-service: default.json + +CDusid-filter-service: +- name: CD_usid-filter-service +- tag: usid-filter-service diff --git a/BMW-Dynatrace-config/CD_usid-filter-service/notification/README.md b/BMW-Dynatrace-config/CD_usid-filter-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_usid-filter-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_usid-filter-service/notification/email.json b/BMW-Dynatrace-config/CD_usid-filter-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_usid-filter-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_usid-filter-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_usid-filter-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_usid-filter-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_usid-filter-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_usid-filter-service/notification/notification.yaml new file mode 100644 index 00000000..2da47e56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_usid-filter-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDusid-filter-service-PROD: msTeams.json +- CDusid-filter-service-E2E: msTeams.json +- CDusid-filter-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDusid-filter-service-PROD: +- name: CD_usid-filter-service PROD +- alertingProfile: CD_usid-filter-service/alerting-profile/CDusid-filter-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDusid-filter-service-PROD.EMEA-Prod: +- name: CD_usid-filter-service PROD +- alertingProfile: CD_usid-filter-service/alerting-profile/CDusid-filter-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDusid-filter-service-PROD.NA-Prod: +- name: CD_usid-filter-service PROD +- alertingProfile: CD_usid-filter-service/alerting-profile/CDusid-filter-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDusid-filter-service-PROD.CN-Prod: +- name: CD_usid-filter-service PROD +- alertingProfile: CD_usid-filter-service/alerting-profile/CDusid-filter-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDusid-filter-service-E2E: +- name: CD_usid-filter-service E2E +- alertingProfile: CD_usid-filter-service/alerting-profile/CDusid-filter-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDusid-filter-service-E2E.EMEA-Prod: +- name: CD_usid-filter-service E2E +- alertingProfile: CD_usid-filter-service/alerting-profile/CDusid-filter-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDusid-filter-service-E2E.NA-Prod: +- name: CD_usid-filter-service E2E +- alertingProfile: CD_usid-filter-service/alerting-profile/CDusid-filter-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDusid-filter-service-E2E.CN-Prod: +- name: CD_usid-filter-service E2E +- alertingProfile: CD_usid-filter-service/alerting-profile/CDusid-filter-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDusid-filter-service-INT: +- name: CD_usid-filter-service INT +- alertingProfile: CD_usid-filter-service/alerting-profile/CDusid-filter-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDusid-filter-service-INT.EMEA-PreProd: +- name: CD_usid-filter-service INT +- alertingProfile: CD_usid-filter-service/alerting-profile/CDusid-filter-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDusid-filter-service-INT.NA-PreProd: +- name: CD_usid-filter-service INT +- alertingProfile: CD_usid-filter-service/alerting-profile/CDusid-filter-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDusid-filter-service-INT.CN-PreProd: +- name: CD_usid-filter-service INT +- alertingProfile: CD_usid-filter-service/alerting-profile/CDusid-filter-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_usid-filter-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_usid-filter-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_usid-filter-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_usid-filter-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_usid-filter-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_usid-filter-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_usid-filter-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_usid-filter-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..cf6255d1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_usid-filter-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- usid-filter-service: default.json + +usid-filter-service: +- name: CD_usid-filter-service - +- mzName: CD_usid-filter-service/management-zone/CDusid-filter-service.name +- mzId: CD_usid-filter-service/management-zone/CDusid-filter-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-composite-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_vehicle-composite-service/alerting-profile/alerting-profile.yaml index 05f8f133..df6c5453 100644 --- a/BMW-Dynatrace-config/CD_vehicle-composite-service/alerting-profile/alerting-profile.yaml +++ b/BMW-Dynatrace-config/CD_vehicle-composite-service/alerting-profile/alerting-profile.yaml @@ -1,6 +1,88 @@ -CDvehicle-composite-service: -- name: CD_vehicle-composite-service/management-zone/CDvehicle-composite-service.name +config: +- CDvehicle-composite-service-PROD: default.json +- CDvehicle-composite-service-E2E: default.json +- CDvehicle-composite-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-composite-service-PROD: +- name: CD_vehicle-composite-service PROD - tag: vehicle-composite-service - mzId: CD_vehicle-composite-service/management-zone/CDvehicle-composite-service.id -config: -- CDvehicle-composite-service: vehicle-composite-service.json +- env: PROD +- skipDeployment: "true" +#Configuration +CDvehicle-composite-service-PROD.EMEA-Prod: +- name: CD_vehicle-composite-service PROD +- tag: vehicle-composite-service +- mzId: CD_vehicle-composite-service/management-zone/CDvehicle-composite-service.id +- env: PROD +- skipDeployment: "false" +CDvehicle-composite-service-PROD.NA-Prod: +- name: CD_vehicle-composite-service PROD +- tag: vehicle-composite-service +- mzId: CD_vehicle-composite-service/management-zone/CDvehicle-composite-service.id +- env: PROD +- skipDeployment: "false" +CDvehicle-composite-service-PROD.CN-Prod: +- name: CD_vehicle-composite-service PROD +- tag: vehicle-composite-service +- mzId: CD_vehicle-composite-service/management-zone/CDvehicle-composite-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-composite-service-E2E: +- name: CD_vehicle-composite-service E2E +- tag: vehicle-composite-service +- mzId: CD_vehicle-composite-service/management-zone/CDvehicle-composite-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDvehicle-composite-service-E2E.EMEA-Prod: +- name: CD_vehicle-composite-service E2E +- tag: vehicle-composite-service +- mzId: CD_vehicle-composite-service/management-zone/CDvehicle-composite-service.id +- env: E2E +- skipDeployment: "false" +CDvehicle-composite-service-E2E.NA-Prod: +- name: CD_vehicle-composite-service E2E +- tag: vehicle-composite-service +- mzId: CD_vehicle-composite-service/management-zone/CDvehicle-composite-service.id +- env: E2E +- skipDeployment: "false" +CDvehicle-composite-service-E2E.CN-Prod: +- name: CD_vehicle-composite-service E2E +- tag: vehicle-composite-service +- mzId: CD_vehicle-composite-service/management-zone/CDvehicle-composite-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-composite-service-INT: +- name: CD_vehicle-composite-service INT +- tag: vehicle-composite-service +- mzId: CD_vehicle-composite-service/management-zone/CDvehicle-composite-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDvehicle-composite-service-INT.EMEA-PreProd: +- name: CD_vehicle-composite-service INT +- tag: vehicle-composite-service +- mzId: CD_vehicle-composite-service/management-zone/CDvehicle-composite-service.id +- env: INT +- skipDeployment: "false" +CDvehicle-composite-service-INT.NA-PreProd: +- name: CD_vehicle-composite-service INT +- tag: vehicle-composite-service +- mzId: CD_vehicle-composite-service/management-zone/CDvehicle-composite-service.id +- env: INT +- skipDeployment: "false" +CDvehicle-composite-service-INT.CN-PreProd: +- name: CD_vehicle-composite-service INT +- tag: vehicle-composite-service +- mzId: CD_vehicle-composite-service/management-zone/CDvehicle-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-composite-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_vehicle-composite-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-composite-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-composite-service/alerting-profile/vehicle-composite-service.json b/BMW-Dynatrace-config/CD_vehicle-composite-service/alerting-profile/vehicle-composite-service.json deleted file mode 100644 index d10ad44a..00000000 --- a/BMW-Dynatrace-config/CD_vehicle-composite-service/alerting-profile/vehicle-composite-service.json +++ /dev/null @@ -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}}" - } - ] - } - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-composite-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_vehicle-composite-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-composite-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-composite-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_vehicle-composite-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-composite-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-composite-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_vehicle-composite-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-composite-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-composite-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_vehicle-composite-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-composite-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-composite-service/dashboard/README.md b/BMW-Dynatrace-config/CD_vehicle-composite-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-composite-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-composite-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_vehicle-composite-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..ffb27847 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-composite-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDvehicle-composite-service-PROD-E2E: defaultPRODE2E.json +- CDvehicle-composite-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDvehicle-composite-service-PROD-E2E: +- name: CD_vehicle-composite-service PROD +- mzName: CD_vehicle-composite-service/management-zone/CDvehicle-composite-service.name +- mzId: CD_vehicle-composite-service/management-zone/CDvehicle-composite-service.id +- skipDeployment: "true" +#Configuration +CDvehicle-composite-service-PROD-E2E.EMEA-Prod: +- name: CD_vehicle-composite-service PROD +- mzName: CD_vehicle-composite-service/management-zone/CDvehicle-composite-service.name +- mzId: CD_vehicle-composite-service/management-zone/CDvehicle-composite-service.id +- tag: vehicle-composite-service +- skipDeployment: "false" +CDvehicle-composite-service-PROD-E2E.NA-Prod: +- name: CD_vehicle-composite-service PROD +- mzName: CD_vehicle-composite-service/management-zone/CDvehicle-composite-service.name +- mzId: CD_vehicle-composite-service/management-zone/CDvehicle-composite-service.id +- tag: vehicle-composite-service +- skipDeployment: "false" +CDvehicle-composite-service-PROD-E2E.CN-Prod: +- name: CD_vehicle-composite-service PROD +- mzName: CD_vehicle-composite-service/management-zone/CDvehicle-composite-service.name +- mzId: CD_vehicle-composite-service/management-zone/CDvehicle-composite-service.id +- tag: vehicle-composite-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDvehicle-composite-service-INT-TEST: +- name: CD_vehicle-composite-service INT-TEST +- mzName: CD_vehicle-composite-service/management-zone/CDvehicle-composite-service.name +- mzId: CD_vehicle-composite-service/management-zone/CDvehicle-composite-service.id +- tag: vehicle-composite-service +- skipDeployment: "true" +#Configuration +CDvehicle-composite-service-INT-TEST.EMEA-PreProd: +- name: CD_vehicle-composite-service INT-TEST +- mzName: CD_vehicle-composite-service/management-zone/CDvehicle-composite-service.name +- mzId: CD_vehicle-composite-service/management-zone/CDvehicle-composite-service.id +- tag: vehicle-composite-service +- skipDeployment: "false" +CDvehicle-composite-service-INT-TEST.NA-PreProd: +- name: CD_vehicle-composite-service INT-TEST +- mzName: CD_vehicle-composite-service/management-zone/CDvehicle-composite-service.name +- mzId: CD_vehicle-composite-service/management-zone/CDvehicle-composite-service.id +- env: INT +- skipDeployment: "false" +CDvehicle-composite-service-INT-TEST.CN-PreProd: +- name: CD_vehicle-composite-service INT-TEST +- mzName: CD_vehicle-composite-service/management-zone/CDvehicle-composite-service.name +- mzId: CD_vehicle-composite-service/management-zone/CDvehicle-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-composite-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_vehicle-composite-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-composite-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-composite-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_vehicle-composite-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-composite-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-composite-service/management-zone/CDvehicle-composite-service.json b/BMW-Dynatrace-config/CD_vehicle-composite-service/management-zone/CDvehicle-composite-service.json deleted file mode 100644 index b2a9367b..00000000 --- a/BMW-Dynatrace-config/CD_vehicle-composite-service/management-zone/CDvehicle-composite-service.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "dimensionalRules": [], - "name": "{{.name}}", - "rules": [ - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "{{.tag}}" - } - }, - "key": { - "attribute": "SERVICE_TAGS" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "HealthResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PingResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PrometheusResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - } - ], - "enabled": true, - "propagationTypes": [ - "SERVICE_TO_PROCESS_GROUP_LIKE", - "SERVICE_TO_HOST_LIKE" - ], - "type": "SERVICE" - }, - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "{{.tag}}" - } - }, - "key": { - "attribute": "PROCESS_GROUP_TAGS" - } - } - ], - "enabled": true, - "propagationTypes": [ - "PROCESS_GROUP_TO_HOST" - ], - "type": "PROCESS_GROUP" - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-composite-service/management-zone/README.md b/BMW-Dynatrace-config/CD_vehicle-composite-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-composite-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_vehicle-composite-service/management-zone/default.json b/BMW-Dynatrace-config/CD_vehicle-composite-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-composite-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-composite-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_vehicle-composite-service/management-zone/management-zone.yaml index dffac11d..02cc0975 100644 --- a/BMW-Dynatrace-config/CD_vehicle-composite-service/management-zone/management-zone.yaml +++ b/BMW-Dynatrace-config/CD_vehicle-composite-service/management-zone/management-zone.yaml @@ -1,20 +1,6 @@ -CDvehicle-composite-service.CN-PreProd: -- name: CD_vehicle-composite-service -- tag: vehicle-composite-service -CDvehicle-composite-service.CN-Prod: -- name: CD_vehicle-composite-service -- tag: vehicle-composite-service -CDvehicle-composite-service.EMEA-PreProd: -- name: CD_vehicle-composite-service -- tag: vehicle-composite-service -CDvehicle-composite-service.EMEA-Prod: -- name: CD_vehicle-composite-service -- tag: vehicle-composite-service -CDvehicle-composite-service.NA-PreProd: -- name: CD_vehicle-composite-service -- tag: vehicle-composite-service -CDvehicle-composite-service.NA-Prod: -- name: CD_vehicle-composite-service -- tag: vehicle-composite-service config: -- CDvehicle-composite-service: CDvehicle-composite-service.json +- CDvehicle-composite-service: default.json + +CDvehicle-composite-service: +- name: CD_vehicle-composite-service +- tag: vehicle-composite-service diff --git a/BMW-Dynatrace-config/CD_vehicle-composite-service/notification/README.md b/BMW-Dynatrace-config/CD_vehicle-composite-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-composite-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-composite-service/notification/email.json b/BMW-Dynatrace-config/CD_vehicle-composite-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-composite-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-composite-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_vehicle-composite-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-composite-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-composite-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_vehicle-composite-service/notification/notification.yaml new file mode 100644 index 00000000..cd5cf53c --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-composite-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDvehicle-composite-service-PROD: msTeams.json +- CDvehicle-composite-service-E2E: msTeams.json +- CDvehicle-composite-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-composite-service-PROD: +- name: CD_vehicle-composite-service PROD +- alertingProfile: CD_vehicle-composite-service/alerting-profile/CDvehicle-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-composite-service-PROD.EMEA-Prod: +- name: CD_vehicle-composite-service PROD +- alertingProfile: CD_vehicle-composite-service/alerting-profile/CDvehicle-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-composite-service-PROD.NA-Prod: +- name: CD_vehicle-composite-service PROD +- alertingProfile: CD_vehicle-composite-service/alerting-profile/CDvehicle-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-composite-service-PROD.CN-Prod: +- name: CD_vehicle-composite-service PROD +- alertingProfile: CD_vehicle-composite-service/alerting-profile/CDvehicle-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-composite-service-E2E: +- name: CD_vehicle-composite-service E2E +- alertingProfile: CD_vehicle-composite-service/alerting-profile/CDvehicle-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-composite-service-E2E.EMEA-Prod: +- name: CD_vehicle-composite-service E2E +- alertingProfile: CD_vehicle-composite-service/alerting-profile/CDvehicle-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-composite-service-E2E.NA-Prod: +- name: CD_vehicle-composite-service E2E +- alertingProfile: CD_vehicle-composite-service/alerting-profile/CDvehicle-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-composite-service-E2E.CN-Prod: +- name: CD_vehicle-composite-service E2E +- alertingProfile: CD_vehicle-composite-service/alerting-profile/CDvehicle-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-composite-service-INT: +- name: CD_vehicle-composite-service INT +- alertingProfile: CD_vehicle-composite-service/alerting-profile/CDvehicle-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-composite-service-INT.EMEA-PreProd: +- name: CD_vehicle-composite-service INT +- alertingProfile: CD_vehicle-composite-service/alerting-profile/CDvehicle-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-composite-service-INT.NA-PreProd: +- name: CD_vehicle-composite-service INT +- alertingProfile: CD_vehicle-composite-service/alerting-profile/CDvehicle-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-composite-service-INT.CN-PreProd: +- name: CD_vehicle-composite-service INT +- alertingProfile: CD_vehicle-composite-service/alerting-profile/CDvehicle-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-composite-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_vehicle-composite-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-composite-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-composite-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_vehicle-composite-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-composite-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-composite-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_vehicle-composite-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..ceb03171 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-composite-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- vehicle-composite-service: default.json + +vehicle-composite-service: +- name: CD_vehicle-composite-service - +- mzName: CD_vehicle-composite-service/management-zone/CDvehicle-composite-service.name +- mzId: CD_vehicle-composite-service/management-zone/CDvehicle-composite-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-features-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_vehicle-features-service/alerting-profile/alerting-profile.yaml index 6e007a30..436afdab 100644 --- a/BMW-Dynatrace-config/CD_vehicle-features-service/alerting-profile/alerting-profile.yaml +++ b/BMW-Dynatrace-config/CD_vehicle-features-service/alerting-profile/alerting-profile.yaml @@ -1,6 +1,88 @@ -CDvehicle-features-service: -- name: CD_vehicle-features-service/management-zone/CDvehicle-features-service.name +config: +- CDvehicle-features-service-PROD: default.json +- CDvehicle-features-service-E2E: default.json +- CDvehicle-features-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-features-service-PROD: +- name: CD_vehicle-features-service PROD - tag: vehicle-features-service - mzId: CD_vehicle-features-service/management-zone/CDvehicle-features-service.id -config: -- CDvehicle-features-service: vehicle-features-service.json +- env: PROD +- skipDeployment: "true" +#Configuration +CDvehicle-features-service-PROD.EMEA-Prod: +- name: CD_vehicle-features-service PROD +- tag: vehicle-features-service +- mzId: CD_vehicle-features-service/management-zone/CDvehicle-features-service.id +- env: PROD +- skipDeployment: "false" +CDvehicle-features-service-PROD.NA-Prod: +- name: CD_vehicle-features-service PROD +- tag: vehicle-features-service +- mzId: CD_vehicle-features-service/management-zone/CDvehicle-features-service.id +- env: PROD +- skipDeployment: "false" +CDvehicle-features-service-PROD.CN-Prod: +- name: CD_vehicle-features-service PROD +- tag: vehicle-features-service +- mzId: CD_vehicle-features-service/management-zone/CDvehicle-features-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-features-service-E2E: +- name: CD_vehicle-features-service E2E +- tag: vehicle-features-service +- mzId: CD_vehicle-features-service/management-zone/CDvehicle-features-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDvehicle-features-service-E2E.EMEA-Prod: +- name: CD_vehicle-features-service E2E +- tag: vehicle-features-service +- mzId: CD_vehicle-features-service/management-zone/CDvehicle-features-service.id +- env: E2E +- skipDeployment: "false" +CDvehicle-features-service-E2E.NA-Prod: +- name: CD_vehicle-features-service E2E +- tag: vehicle-features-service +- mzId: CD_vehicle-features-service/management-zone/CDvehicle-features-service.id +- env: E2E +- skipDeployment: "false" +CDvehicle-features-service-E2E.CN-Prod: +- name: CD_vehicle-features-service E2E +- tag: vehicle-features-service +- mzId: CD_vehicle-features-service/management-zone/CDvehicle-features-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-features-service-INT: +- name: CD_vehicle-features-service INT +- tag: vehicle-features-service +- mzId: CD_vehicle-features-service/management-zone/CDvehicle-features-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDvehicle-features-service-INT.EMEA-PreProd: +- name: CD_vehicle-features-service INT +- tag: vehicle-features-service +- mzId: CD_vehicle-features-service/management-zone/CDvehicle-features-service.id +- env: INT +- skipDeployment: "false" +CDvehicle-features-service-INT.NA-PreProd: +- name: CD_vehicle-features-service INT +- tag: vehicle-features-service +- mzId: CD_vehicle-features-service/management-zone/CDvehicle-features-service.id +- env: INT +- skipDeployment: "false" +CDvehicle-features-service-INT.CN-PreProd: +- name: CD_vehicle-features-service INT +- tag: vehicle-features-service +- mzId: CD_vehicle-features-service/management-zone/CDvehicle-features-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-features-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_vehicle-features-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-features-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-features-service/alerting-profile/vehicle-features-service.json b/BMW-Dynatrace-config/CD_vehicle-features-service/alerting-profile/vehicle-features-service.json deleted file mode 100644 index d10ad44a..00000000 --- a/BMW-Dynatrace-config/CD_vehicle-features-service/alerting-profile/vehicle-features-service.json +++ /dev/null @@ -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}}" - } - ] - } - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-features-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_vehicle-features-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-features-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-features-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_vehicle-features-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-features-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-features-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_vehicle-features-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-features-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-features-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_vehicle-features-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-features-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-features-service/dashboard/README.md b/BMW-Dynatrace-config/CD_vehicle-features-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-features-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-features-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_vehicle-features-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..02efdd71 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-features-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDvehicle-features-service-PROD-E2E: defaultPRODE2E.json +- CDvehicle-features-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDvehicle-features-service-PROD-E2E: +- name: CD_vehicle-features-service PROD +- mzName: CD_vehicle-features-service/management-zone/CDvehicle-features-service.name +- mzId: CD_vehicle-features-service/management-zone/CDvehicle-features-service.id +- skipDeployment: "true" +#Configuration +CDvehicle-features-service-PROD-E2E.EMEA-Prod: +- name: CD_vehicle-features-service PROD +- mzName: CD_vehicle-features-service/management-zone/CDvehicle-features-service.name +- mzId: CD_vehicle-features-service/management-zone/CDvehicle-features-service.id +- tag: vehicle-features-service +- skipDeployment: "false" +CDvehicle-features-service-PROD-E2E.NA-Prod: +- name: CD_vehicle-features-service PROD +- mzName: CD_vehicle-features-service/management-zone/CDvehicle-features-service.name +- mzId: CD_vehicle-features-service/management-zone/CDvehicle-features-service.id +- tag: vehicle-features-service +- skipDeployment: "false" +CDvehicle-features-service-PROD-E2E.CN-Prod: +- name: CD_vehicle-features-service PROD +- mzName: CD_vehicle-features-service/management-zone/CDvehicle-features-service.name +- mzId: CD_vehicle-features-service/management-zone/CDvehicle-features-service.id +- tag: vehicle-features-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDvehicle-features-service-INT-TEST: +- name: CD_vehicle-features-service INT-TEST +- mzName: CD_vehicle-features-service/management-zone/CDvehicle-features-service.name +- mzId: CD_vehicle-features-service/management-zone/CDvehicle-features-service.id +- tag: vehicle-features-service +- skipDeployment: "true" +#Configuration +CDvehicle-features-service-INT-TEST.EMEA-PreProd: +- name: CD_vehicle-features-service INT-TEST +- mzName: CD_vehicle-features-service/management-zone/CDvehicle-features-service.name +- mzId: CD_vehicle-features-service/management-zone/CDvehicle-features-service.id +- tag: vehicle-features-service +- skipDeployment: "false" +CDvehicle-features-service-INT-TEST.NA-PreProd: +- name: CD_vehicle-features-service INT-TEST +- mzName: CD_vehicle-features-service/management-zone/CDvehicle-features-service.name +- mzId: CD_vehicle-features-service/management-zone/CDvehicle-features-service.id +- env: INT +- skipDeployment: "false" +CDvehicle-features-service-INT-TEST.CN-PreProd: +- name: CD_vehicle-features-service INT-TEST +- mzName: CD_vehicle-features-service/management-zone/CDvehicle-features-service.name +- mzId: CD_vehicle-features-service/management-zone/CDvehicle-features-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-features-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_vehicle-features-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-features-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-features-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_vehicle-features-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-features-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-features-service/management-zone/CDvehicle-features-service.json b/BMW-Dynatrace-config/CD_vehicle-features-service/management-zone/CDvehicle-features-service.json deleted file mode 100644 index b2a9367b..00000000 --- a/BMW-Dynatrace-config/CD_vehicle-features-service/management-zone/CDvehicle-features-service.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "dimensionalRules": [], - "name": "{{.name}}", - "rules": [ - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "{{.tag}}" - } - }, - "key": { - "attribute": "SERVICE_TAGS" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "HealthResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PingResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PrometheusResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - } - ], - "enabled": true, - "propagationTypes": [ - "SERVICE_TO_PROCESS_GROUP_LIKE", - "SERVICE_TO_HOST_LIKE" - ], - "type": "SERVICE" - }, - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "{{.tag}}" - } - }, - "key": { - "attribute": "PROCESS_GROUP_TAGS" - } - } - ], - "enabled": true, - "propagationTypes": [ - "PROCESS_GROUP_TO_HOST" - ], - "type": "PROCESS_GROUP" - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-features-service/management-zone/README.md b/BMW-Dynatrace-config/CD_vehicle-features-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-features-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_vehicle-features-service/management-zone/default.json b/BMW-Dynatrace-config/CD_vehicle-features-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-features-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-features-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_vehicle-features-service/management-zone/management-zone.yaml index 2af9b0fc..18b464a3 100644 --- a/BMW-Dynatrace-config/CD_vehicle-features-service/management-zone/management-zone.yaml +++ b/BMW-Dynatrace-config/CD_vehicle-features-service/management-zone/management-zone.yaml @@ -1,20 +1,6 @@ -CDvehicle-features-service.CN-PreProd: -- name: CD_vehicle-features-service -- tag: vehicle-features-service -CDvehicle-features-service.CN-Prod: -- name: CD_vehicle-features-service -- tag: vehicle-features-service -CDvehicle-features-service.EMEA-PreProd: -- name: CD_vehicle-features-service -- tag: vehicle-features-service -CDvehicle-features-service.EMEA-Prod: -- name: CD_vehicle-features-service -- tag: vehicle-features-service -CDvehicle-features-service.NA-PreProd: -- name: CD_vehicle-features-service -- tag: vehicle-features-service -CDvehicle-features-service.NA-Prod: -- name: CD_vehicle-features-service -- tag: vehicle-features-service config: -- CDvehicle-features-service: CDvehicle-features-service.json +- CDvehicle-features-service: default.json + +CDvehicle-features-service: +- name: CD_vehicle-features-service +- tag: vehicle-features-service diff --git a/BMW-Dynatrace-config/CD_vehicle-features-service/notification/README.md b/BMW-Dynatrace-config/CD_vehicle-features-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-features-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-features-service/notification/email.json b/BMW-Dynatrace-config/CD_vehicle-features-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-features-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-features-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_vehicle-features-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-features-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-features-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_vehicle-features-service/notification/notification.yaml new file mode 100644 index 00000000..988db81c --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-features-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDvehicle-features-service-PROD: msTeams.json +- CDvehicle-features-service-E2E: msTeams.json +- CDvehicle-features-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-features-service-PROD: +- name: CD_vehicle-features-service PROD +- alertingProfile: CD_vehicle-features-service/alerting-profile/CDvehicle-features-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-features-service-PROD.EMEA-Prod: +- name: CD_vehicle-features-service PROD +- alertingProfile: CD_vehicle-features-service/alerting-profile/CDvehicle-features-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-features-service-PROD.NA-Prod: +- name: CD_vehicle-features-service PROD +- alertingProfile: CD_vehicle-features-service/alerting-profile/CDvehicle-features-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-features-service-PROD.CN-Prod: +- name: CD_vehicle-features-service PROD +- alertingProfile: CD_vehicle-features-service/alerting-profile/CDvehicle-features-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-features-service-E2E: +- name: CD_vehicle-features-service E2E +- alertingProfile: CD_vehicle-features-service/alerting-profile/CDvehicle-features-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-features-service-E2E.EMEA-Prod: +- name: CD_vehicle-features-service E2E +- alertingProfile: CD_vehicle-features-service/alerting-profile/CDvehicle-features-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-features-service-E2E.NA-Prod: +- name: CD_vehicle-features-service E2E +- alertingProfile: CD_vehicle-features-service/alerting-profile/CDvehicle-features-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-features-service-E2E.CN-Prod: +- name: CD_vehicle-features-service E2E +- alertingProfile: CD_vehicle-features-service/alerting-profile/CDvehicle-features-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-features-service-INT: +- name: CD_vehicle-features-service INT +- alertingProfile: CD_vehicle-features-service/alerting-profile/CDvehicle-features-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-features-service-INT.EMEA-PreProd: +- name: CD_vehicle-features-service INT +- alertingProfile: CD_vehicle-features-service/alerting-profile/CDvehicle-features-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-features-service-INT.NA-PreProd: +- name: CD_vehicle-features-service INT +- alertingProfile: CD_vehicle-features-service/alerting-profile/CDvehicle-features-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-features-service-INT.CN-PreProd: +- name: CD_vehicle-features-service INT +- alertingProfile: CD_vehicle-features-service/alerting-profile/CDvehicle-features-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-features-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_vehicle-features-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-features-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-features-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_vehicle-features-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-features-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-features-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_vehicle-features-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..46d304fd --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-features-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- vehicle-features-service: default.json + +vehicle-features-service: +- name: CD_vehicle-features-service - +- mzName: CD_vehicle-features-service/management-zone/CDvehicle-features-service.name +- mzId: CD_vehicle-features-service/management-zone/CDvehicle-features-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..c51b2a58 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDvehicle-list-proxy-service-PROD: default.json +- CDvehicle-list-proxy-service-E2E: default.json +- CDvehicle-list-proxy-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-list-proxy-service-PROD: +- name: CD_vehicle-list-proxy-service PROD +- tag: vehicle-list-proxy-service +- mzId: CD_vehicle-list-proxy-service/management-zone/CDvehicle-list-proxy-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDvehicle-list-proxy-service-PROD.EMEA-Prod: +- name: CD_vehicle-list-proxy-service PROD +- tag: vehicle-list-proxy-service +- mzId: CD_vehicle-list-proxy-service/management-zone/CDvehicle-list-proxy-service.id +- env: PROD +- skipDeployment: "false" +CDvehicle-list-proxy-service-PROD.NA-Prod: +- name: CD_vehicle-list-proxy-service PROD +- tag: vehicle-list-proxy-service +- mzId: CD_vehicle-list-proxy-service/management-zone/CDvehicle-list-proxy-service.id +- env: PROD +- skipDeployment: "false" +CDvehicle-list-proxy-service-PROD.CN-Prod: +- name: CD_vehicle-list-proxy-service PROD +- tag: vehicle-list-proxy-service +- mzId: CD_vehicle-list-proxy-service/management-zone/CDvehicle-list-proxy-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-list-proxy-service-E2E: +- name: CD_vehicle-list-proxy-service E2E +- tag: vehicle-list-proxy-service +- mzId: CD_vehicle-list-proxy-service/management-zone/CDvehicle-list-proxy-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDvehicle-list-proxy-service-E2E.EMEA-Prod: +- name: CD_vehicle-list-proxy-service E2E +- tag: vehicle-list-proxy-service +- mzId: CD_vehicle-list-proxy-service/management-zone/CDvehicle-list-proxy-service.id +- env: E2E +- skipDeployment: "false" +CDvehicle-list-proxy-service-E2E.NA-Prod: +- name: CD_vehicle-list-proxy-service E2E +- tag: vehicle-list-proxy-service +- mzId: CD_vehicle-list-proxy-service/management-zone/CDvehicle-list-proxy-service.id +- env: E2E +- skipDeployment: "false" +CDvehicle-list-proxy-service-E2E.CN-Prod: +- name: CD_vehicle-list-proxy-service E2E +- tag: vehicle-list-proxy-service +- mzId: CD_vehicle-list-proxy-service/management-zone/CDvehicle-list-proxy-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-list-proxy-service-INT: +- name: CD_vehicle-list-proxy-service INT +- tag: vehicle-list-proxy-service +- mzId: CD_vehicle-list-proxy-service/management-zone/CDvehicle-list-proxy-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDvehicle-list-proxy-service-INT.EMEA-PreProd: +- name: CD_vehicle-list-proxy-service INT +- tag: vehicle-list-proxy-service +- mzId: CD_vehicle-list-proxy-service/management-zone/CDvehicle-list-proxy-service.id +- env: INT +- skipDeployment: "false" +CDvehicle-list-proxy-service-INT.NA-PreProd: +- name: CD_vehicle-list-proxy-service INT +- tag: vehicle-list-proxy-service +- mzId: CD_vehicle-list-proxy-service/management-zone/CDvehicle-list-proxy-service.id +- env: INT +- skipDeployment: "false" +CDvehicle-list-proxy-service-INT.CN-PreProd: +- name: CD_vehicle-list-proxy-service INT +- tag: vehicle-list-proxy-service +- mzId: CD_vehicle-list-proxy-service/management-zone/CDvehicle-list-proxy-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/dashboard/README.md b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..fbde9eb1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDvehicle-list-proxy-service-PROD-E2E: defaultPRODE2E.json +- CDvehicle-list-proxy-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDvehicle-list-proxy-service-PROD-E2E: +- name: CD_vehicle-list-proxy-service PROD +- mzName: CD_vehicle-list-proxy-service/management-zone/CDvehicle-list-proxy-service.name +- mzId: CD_vehicle-list-proxy-service/management-zone/CDvehicle-list-proxy-service.id +- skipDeployment: "true" +#Configuration +CDvehicle-list-proxy-service-PROD-E2E.EMEA-Prod: +- name: CD_vehicle-list-proxy-service PROD +- mzName: CD_vehicle-list-proxy-service/management-zone/CDvehicle-list-proxy-service.name +- mzId: CD_vehicle-list-proxy-service/management-zone/CDvehicle-list-proxy-service.id +- tag: vehicle-list-proxy-service +- skipDeployment: "false" +CDvehicle-list-proxy-service-PROD-E2E.NA-Prod: +- name: CD_vehicle-list-proxy-service PROD +- mzName: CD_vehicle-list-proxy-service/management-zone/CDvehicle-list-proxy-service.name +- mzId: CD_vehicle-list-proxy-service/management-zone/CDvehicle-list-proxy-service.id +- tag: vehicle-list-proxy-service +- skipDeployment: "false" +CDvehicle-list-proxy-service-PROD-E2E.CN-Prod: +- name: CD_vehicle-list-proxy-service PROD +- mzName: CD_vehicle-list-proxy-service/management-zone/CDvehicle-list-proxy-service.name +- mzId: CD_vehicle-list-proxy-service/management-zone/CDvehicle-list-proxy-service.id +- tag: vehicle-list-proxy-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDvehicle-list-proxy-service-INT-TEST: +- name: CD_vehicle-list-proxy-service INT-TEST +- mzName: CD_vehicle-list-proxy-service/management-zone/CDvehicle-list-proxy-service.name +- mzId: CD_vehicle-list-proxy-service/management-zone/CDvehicle-list-proxy-service.id +- tag: vehicle-list-proxy-service +- skipDeployment: "true" +#Configuration +CDvehicle-list-proxy-service-INT-TEST.EMEA-PreProd: +- name: CD_vehicle-list-proxy-service INT-TEST +- mzName: CD_vehicle-list-proxy-service/management-zone/CDvehicle-list-proxy-service.name +- mzId: CD_vehicle-list-proxy-service/management-zone/CDvehicle-list-proxy-service.id +- tag: vehicle-list-proxy-service +- skipDeployment: "false" +CDvehicle-list-proxy-service-INT-TEST.NA-PreProd: +- name: CD_vehicle-list-proxy-service INT-TEST +- mzName: CD_vehicle-list-proxy-service/management-zone/CDvehicle-list-proxy-service.name +- mzId: CD_vehicle-list-proxy-service/management-zone/CDvehicle-list-proxy-service.id +- env: INT +- skipDeployment: "false" +CDvehicle-list-proxy-service-INT-TEST.CN-PreProd: +- name: CD_vehicle-list-proxy-service INT-TEST +- mzName: CD_vehicle-list-proxy-service/management-zone/CDvehicle-list-proxy-service.name +- mzId: CD_vehicle-list-proxy-service/management-zone/CDvehicle-list-proxy-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/management-zone/README.md b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/management-zone/default.json b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..85ecd6a9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDvehicle-list-proxy-service: default.json + +CDvehicle-list-proxy-service: +- name: CD_vehicle-list-proxy-service +- tag: vehicle-list-proxy-service diff --git a/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/notification/README.md b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/notification/email.json b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/notification/notification.yaml new file mode 100644 index 00000000..a81cd82d --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDvehicle-list-proxy-service-PROD: msTeams.json +- CDvehicle-list-proxy-service-E2E: msTeams.json +- CDvehicle-list-proxy-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-list-proxy-service-PROD: +- name: CD_vehicle-list-proxy-service PROD +- alertingProfile: CD_vehicle-list-proxy-service/alerting-profile/CDvehicle-list-proxy-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-list-proxy-service-PROD.EMEA-Prod: +- name: CD_vehicle-list-proxy-service PROD +- alertingProfile: CD_vehicle-list-proxy-service/alerting-profile/CDvehicle-list-proxy-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-list-proxy-service-PROD.NA-Prod: +- name: CD_vehicle-list-proxy-service PROD +- alertingProfile: CD_vehicle-list-proxy-service/alerting-profile/CDvehicle-list-proxy-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-list-proxy-service-PROD.CN-Prod: +- name: CD_vehicle-list-proxy-service PROD +- alertingProfile: CD_vehicle-list-proxy-service/alerting-profile/CDvehicle-list-proxy-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-list-proxy-service-E2E: +- name: CD_vehicle-list-proxy-service E2E +- alertingProfile: CD_vehicle-list-proxy-service/alerting-profile/CDvehicle-list-proxy-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-list-proxy-service-E2E.EMEA-Prod: +- name: CD_vehicle-list-proxy-service E2E +- alertingProfile: CD_vehicle-list-proxy-service/alerting-profile/CDvehicle-list-proxy-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-list-proxy-service-E2E.NA-Prod: +- name: CD_vehicle-list-proxy-service E2E +- alertingProfile: CD_vehicle-list-proxy-service/alerting-profile/CDvehicle-list-proxy-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-list-proxy-service-E2E.CN-Prod: +- name: CD_vehicle-list-proxy-service E2E +- alertingProfile: CD_vehicle-list-proxy-service/alerting-profile/CDvehicle-list-proxy-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-list-proxy-service-INT: +- name: CD_vehicle-list-proxy-service INT +- alertingProfile: CD_vehicle-list-proxy-service/alerting-profile/CDvehicle-list-proxy-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-list-proxy-service-INT.EMEA-PreProd: +- name: CD_vehicle-list-proxy-service INT +- alertingProfile: CD_vehicle-list-proxy-service/alerting-profile/CDvehicle-list-proxy-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-list-proxy-service-INT.NA-PreProd: +- name: CD_vehicle-list-proxy-service INT +- alertingProfile: CD_vehicle-list-proxy-service/alerting-profile/CDvehicle-list-proxy-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-list-proxy-service-INT.CN-PreProd: +- name: CD_vehicle-list-proxy-service INT +- alertingProfile: CD_vehicle-list-proxy-service/alerting-profile/CDvehicle-list-proxy-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..cef90d92 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- vehicle-list-proxy-service: default.json + +vehicle-list-proxy-service: +- name: CD_vehicle-list-proxy-service - +- mzName: CD_vehicle-list-proxy-service/management-zone/CDvehicle-list-proxy-service.name +- mzId: CD_vehicle-list-proxy-service/management-zone/CDvehicle-list-proxy-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/alerting-profile/alerting-profile.yaml index f2f6e6d2..ad094bac 100644 --- a/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/alerting-profile/alerting-profile.yaml +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/alerting-profile/alerting-profile.yaml @@ -1,6 +1,88 @@ -CDvehicle-mapping-composite-service: -- name: CD_vehicle-mapping-composite-service/management-zone/CDvehicle-mapping-composite-service.name +config: +- CDvehicle-mapping-composite-service-PROD: default.json +- CDvehicle-mapping-composite-service-E2E: default.json +- CDvehicle-mapping-composite-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-mapping-composite-service-PROD: +- name: CD_vehicle-mapping-composite-service PROD - tag: vehicle-mapping-composite-service - mzId: CD_vehicle-mapping-composite-service/management-zone/CDvehicle-mapping-composite-service.id -config: -- CDvehicle-mapping-composite-service: vehicle-mapping-composite-service.json +- env: PROD +- skipDeployment: "true" +#Configuration +CDvehicle-mapping-composite-service-PROD.EMEA-Prod: +- name: CD_vehicle-mapping-composite-service PROD +- tag: vehicle-mapping-composite-service +- mzId: CD_vehicle-mapping-composite-service/management-zone/CDvehicle-mapping-composite-service.id +- env: PROD +- skipDeployment: "false" +CDvehicle-mapping-composite-service-PROD.NA-Prod: +- name: CD_vehicle-mapping-composite-service PROD +- tag: vehicle-mapping-composite-service +- mzId: CD_vehicle-mapping-composite-service/management-zone/CDvehicle-mapping-composite-service.id +- env: PROD +- skipDeployment: "false" +CDvehicle-mapping-composite-service-PROD.CN-Prod: +- name: CD_vehicle-mapping-composite-service PROD +- tag: vehicle-mapping-composite-service +- mzId: CD_vehicle-mapping-composite-service/management-zone/CDvehicle-mapping-composite-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-mapping-composite-service-E2E: +- name: CD_vehicle-mapping-composite-service E2E +- tag: vehicle-mapping-composite-service +- mzId: CD_vehicle-mapping-composite-service/management-zone/CDvehicle-mapping-composite-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDvehicle-mapping-composite-service-E2E.EMEA-Prod: +- name: CD_vehicle-mapping-composite-service E2E +- tag: vehicle-mapping-composite-service +- mzId: CD_vehicle-mapping-composite-service/management-zone/CDvehicle-mapping-composite-service.id +- env: E2E +- skipDeployment: "false" +CDvehicle-mapping-composite-service-E2E.NA-Prod: +- name: CD_vehicle-mapping-composite-service E2E +- tag: vehicle-mapping-composite-service +- mzId: CD_vehicle-mapping-composite-service/management-zone/CDvehicle-mapping-composite-service.id +- env: E2E +- skipDeployment: "false" +CDvehicle-mapping-composite-service-E2E.CN-Prod: +- name: CD_vehicle-mapping-composite-service E2E +- tag: vehicle-mapping-composite-service +- mzId: CD_vehicle-mapping-composite-service/management-zone/CDvehicle-mapping-composite-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-mapping-composite-service-INT: +- name: CD_vehicle-mapping-composite-service INT +- tag: vehicle-mapping-composite-service +- mzId: CD_vehicle-mapping-composite-service/management-zone/CDvehicle-mapping-composite-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDvehicle-mapping-composite-service-INT.EMEA-PreProd: +- name: CD_vehicle-mapping-composite-service INT +- tag: vehicle-mapping-composite-service +- mzId: CD_vehicle-mapping-composite-service/management-zone/CDvehicle-mapping-composite-service.id +- env: INT +- skipDeployment: "false" +CDvehicle-mapping-composite-service-INT.NA-PreProd: +- name: CD_vehicle-mapping-composite-service INT +- tag: vehicle-mapping-composite-service +- mzId: CD_vehicle-mapping-composite-service/management-zone/CDvehicle-mapping-composite-service.id +- env: INT +- skipDeployment: "false" +CDvehicle-mapping-composite-service-INT.CN-PreProd: +- name: CD_vehicle-mapping-composite-service INT +- tag: vehicle-mapping-composite-service +- mzId: CD_vehicle-mapping-composite-service/management-zone/CDvehicle-mapping-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/alerting-profile/vehicle-mapping-composite-service.json b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/alerting-profile/vehicle-mapping-composite-service.json deleted file mode 100644 index d10ad44a..00000000 --- a/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/alerting-profile/vehicle-mapping-composite-service.json +++ /dev/null @@ -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}}" - } - ] - } - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/dashboard/README.md b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..7654ea76 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDvehicle-mapping-composite-service-PROD-E2E: defaultPRODE2E.json +- CDvehicle-mapping-composite-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDvehicle-mapping-composite-service-PROD-E2E: +- name: CD_vehicle-mapping-composite-service PROD +- mzName: CD_vehicle-mapping-composite-service/management-zone/CDvehicle-mapping-composite-service.name +- mzId: CD_vehicle-mapping-composite-service/management-zone/CDvehicle-mapping-composite-service.id +- skipDeployment: "true" +#Configuration +CDvehicle-mapping-composite-service-PROD-E2E.EMEA-Prod: +- name: CD_vehicle-mapping-composite-service PROD +- mzName: CD_vehicle-mapping-composite-service/management-zone/CDvehicle-mapping-composite-service.name +- mzId: CD_vehicle-mapping-composite-service/management-zone/CDvehicle-mapping-composite-service.id +- tag: vehicle-mapping-composite-service +- skipDeployment: "false" +CDvehicle-mapping-composite-service-PROD-E2E.NA-Prod: +- name: CD_vehicle-mapping-composite-service PROD +- mzName: CD_vehicle-mapping-composite-service/management-zone/CDvehicle-mapping-composite-service.name +- mzId: CD_vehicle-mapping-composite-service/management-zone/CDvehicle-mapping-composite-service.id +- tag: vehicle-mapping-composite-service +- skipDeployment: "false" +CDvehicle-mapping-composite-service-PROD-E2E.CN-Prod: +- name: CD_vehicle-mapping-composite-service PROD +- mzName: CD_vehicle-mapping-composite-service/management-zone/CDvehicle-mapping-composite-service.name +- mzId: CD_vehicle-mapping-composite-service/management-zone/CDvehicle-mapping-composite-service.id +- tag: vehicle-mapping-composite-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDvehicle-mapping-composite-service-INT-TEST: +- name: CD_vehicle-mapping-composite-service INT-TEST +- mzName: CD_vehicle-mapping-composite-service/management-zone/CDvehicle-mapping-composite-service.name +- mzId: CD_vehicle-mapping-composite-service/management-zone/CDvehicle-mapping-composite-service.id +- tag: vehicle-mapping-composite-service +- skipDeployment: "true" +#Configuration +CDvehicle-mapping-composite-service-INT-TEST.EMEA-PreProd: +- name: CD_vehicle-mapping-composite-service INT-TEST +- mzName: CD_vehicle-mapping-composite-service/management-zone/CDvehicle-mapping-composite-service.name +- mzId: CD_vehicle-mapping-composite-service/management-zone/CDvehicle-mapping-composite-service.id +- tag: vehicle-mapping-composite-service +- skipDeployment: "false" +CDvehicle-mapping-composite-service-INT-TEST.NA-PreProd: +- name: CD_vehicle-mapping-composite-service INT-TEST +- mzName: CD_vehicle-mapping-composite-service/management-zone/CDvehicle-mapping-composite-service.name +- mzId: CD_vehicle-mapping-composite-service/management-zone/CDvehicle-mapping-composite-service.id +- env: INT +- skipDeployment: "false" +CDvehicle-mapping-composite-service-INT-TEST.CN-PreProd: +- name: CD_vehicle-mapping-composite-service INT-TEST +- mzName: CD_vehicle-mapping-composite-service/management-zone/CDvehicle-mapping-composite-service.name +- mzId: CD_vehicle-mapping-composite-service/management-zone/CDvehicle-mapping-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/management-zone/CDvehicle-mapping-composite-service.json b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/management-zone/CDvehicle-mapping-composite-service.json deleted file mode 100644 index b2a9367b..00000000 --- a/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/management-zone/CDvehicle-mapping-composite-service.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "dimensionalRules": [], - "name": "{{.name}}", - "rules": [ - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "{{.tag}}" - } - }, - "key": { - "attribute": "SERVICE_TAGS" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "HealthResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PingResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PrometheusResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - } - ], - "enabled": true, - "propagationTypes": [ - "SERVICE_TO_PROCESS_GROUP_LIKE", - "SERVICE_TO_HOST_LIKE" - ], - "type": "SERVICE" - }, - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "{{.tag}}" - } - }, - "key": { - "attribute": "PROCESS_GROUP_TAGS" - } - } - ], - "enabled": true, - "propagationTypes": [ - "PROCESS_GROUP_TO_HOST" - ], - "type": "PROCESS_GROUP" - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/management-zone/README.md b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/management-zone/default.json b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/management-zone/management-zone.yaml index 83213568..ce4f17a0 100644 --- a/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/management-zone/management-zone.yaml +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/management-zone/management-zone.yaml @@ -1,20 +1,6 @@ -CDvehicle-mapping-composite-service.CN-PreProd: -- name: CD_vehicle-mapping-composite-service -- tag: vehicle-mapping-composite-service -CDvehicle-mapping-composite-service.CN-Prod: -- name: CD_vehicle-mapping-composite-service -- tag: vehicle-mapping-composite-service -CDvehicle-mapping-composite-service.EMEA-PreProd: -- name: CD_vehicle-mapping-composite-service -- tag: vehicle-mapping-composite-service -CDvehicle-mapping-composite-service.EMEA-Prod: -- name: CD_vehicle-mapping-composite-service -- tag: vehicle-mapping-composite-service -CDvehicle-mapping-composite-service.NA-PreProd: -- name: CD_vehicle-mapping-composite-service -- tag: vehicle-mapping-composite-service -CDvehicle-mapping-composite-service.NA-Prod: -- name: CD_vehicle-mapping-composite-service -- tag: vehicle-mapping-composite-service config: -- CDvehicle-mapping-composite-service: CDvehicle-mapping-composite-service.json +- CDvehicle-mapping-composite-service: default.json + +CDvehicle-mapping-composite-service: +- name: CD_vehicle-mapping-composite-service +- tag: vehicle-mapping-composite-service diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/notification/README.md b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/notification/email.json b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/notification/notification.yaml new file mode 100644 index 00000000..920abb7a --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDvehicle-mapping-composite-service-PROD: msTeams.json +- CDvehicle-mapping-composite-service-E2E: msTeams.json +- CDvehicle-mapping-composite-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-mapping-composite-service-PROD: +- name: CD_vehicle-mapping-composite-service PROD +- alertingProfile: CD_vehicle-mapping-composite-service/alerting-profile/CDvehicle-mapping-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-mapping-composite-service-PROD.EMEA-Prod: +- name: CD_vehicle-mapping-composite-service PROD +- alertingProfile: CD_vehicle-mapping-composite-service/alerting-profile/CDvehicle-mapping-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-mapping-composite-service-PROD.NA-Prod: +- name: CD_vehicle-mapping-composite-service PROD +- alertingProfile: CD_vehicle-mapping-composite-service/alerting-profile/CDvehicle-mapping-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-mapping-composite-service-PROD.CN-Prod: +- name: CD_vehicle-mapping-composite-service PROD +- alertingProfile: CD_vehicle-mapping-composite-service/alerting-profile/CDvehicle-mapping-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-mapping-composite-service-E2E: +- name: CD_vehicle-mapping-composite-service E2E +- alertingProfile: CD_vehicle-mapping-composite-service/alerting-profile/CDvehicle-mapping-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-mapping-composite-service-E2E.EMEA-Prod: +- name: CD_vehicle-mapping-composite-service E2E +- alertingProfile: CD_vehicle-mapping-composite-service/alerting-profile/CDvehicle-mapping-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-mapping-composite-service-E2E.NA-Prod: +- name: CD_vehicle-mapping-composite-service E2E +- alertingProfile: CD_vehicle-mapping-composite-service/alerting-profile/CDvehicle-mapping-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-mapping-composite-service-E2E.CN-Prod: +- name: CD_vehicle-mapping-composite-service E2E +- alertingProfile: CD_vehicle-mapping-composite-service/alerting-profile/CDvehicle-mapping-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-mapping-composite-service-INT: +- name: CD_vehicle-mapping-composite-service INT +- alertingProfile: CD_vehicle-mapping-composite-service/alerting-profile/CDvehicle-mapping-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-mapping-composite-service-INT.EMEA-PreProd: +- name: CD_vehicle-mapping-composite-service INT +- alertingProfile: CD_vehicle-mapping-composite-service/alerting-profile/CDvehicle-mapping-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-mapping-composite-service-INT.NA-PreProd: +- name: CD_vehicle-mapping-composite-service INT +- alertingProfile: CD_vehicle-mapping-composite-service/alerting-profile/CDvehicle-mapping-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-mapping-composite-service-INT.CN-PreProd: +- name: CD_vehicle-mapping-composite-service INT +- alertingProfile: CD_vehicle-mapping-composite-service/alerting-profile/CDvehicle-mapping-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..cb78e652 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- vehicle-mapping-composite-service: default.json + +vehicle-mapping-composite-service: +- name: CD_vehicle-mapping-composite-service - +- mzName: CD_vehicle-mapping-composite-service/management-zone/CDvehicle-mapping-composite-service.name +- mzId: CD_vehicle-mapping-composite-service/management-zone/CDvehicle-mapping-composite-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_vehicle-mapping-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..1f6a060f --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDvehicle-mapping-service-PROD: default.json +- CDvehicle-mapping-service-E2E: default.json +- CDvehicle-mapping-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-mapping-service-PROD: +- name: CD_vehicle-mapping-service PROD +- tag: vehicle-mapping-service +- mzId: CD_vehicle-mapping-service/management-zone/CDvehicle-mapping-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDvehicle-mapping-service-PROD.EMEA-Prod: +- name: CD_vehicle-mapping-service PROD +- tag: vehicle-mapping-service +- mzId: CD_vehicle-mapping-service/management-zone/CDvehicle-mapping-service.id +- env: PROD +- skipDeployment: "false" +CDvehicle-mapping-service-PROD.NA-Prod: +- name: CD_vehicle-mapping-service PROD +- tag: vehicle-mapping-service +- mzId: CD_vehicle-mapping-service/management-zone/CDvehicle-mapping-service.id +- env: PROD +- skipDeployment: "false" +CDvehicle-mapping-service-PROD.CN-Prod: +- name: CD_vehicle-mapping-service PROD +- tag: vehicle-mapping-service +- mzId: CD_vehicle-mapping-service/management-zone/CDvehicle-mapping-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-mapping-service-E2E: +- name: CD_vehicle-mapping-service E2E +- tag: vehicle-mapping-service +- mzId: CD_vehicle-mapping-service/management-zone/CDvehicle-mapping-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDvehicle-mapping-service-E2E.EMEA-Prod: +- name: CD_vehicle-mapping-service E2E +- tag: vehicle-mapping-service +- mzId: CD_vehicle-mapping-service/management-zone/CDvehicle-mapping-service.id +- env: E2E +- skipDeployment: "false" +CDvehicle-mapping-service-E2E.NA-Prod: +- name: CD_vehicle-mapping-service E2E +- tag: vehicle-mapping-service +- mzId: CD_vehicle-mapping-service/management-zone/CDvehicle-mapping-service.id +- env: E2E +- skipDeployment: "false" +CDvehicle-mapping-service-E2E.CN-Prod: +- name: CD_vehicle-mapping-service E2E +- tag: vehicle-mapping-service +- mzId: CD_vehicle-mapping-service/management-zone/CDvehicle-mapping-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-mapping-service-INT: +- name: CD_vehicle-mapping-service INT +- tag: vehicle-mapping-service +- mzId: CD_vehicle-mapping-service/management-zone/CDvehicle-mapping-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDvehicle-mapping-service-INT.EMEA-PreProd: +- name: CD_vehicle-mapping-service INT +- tag: vehicle-mapping-service +- mzId: CD_vehicle-mapping-service/management-zone/CDvehicle-mapping-service.id +- env: INT +- skipDeployment: "false" +CDvehicle-mapping-service-INT.NA-PreProd: +- name: CD_vehicle-mapping-service INT +- tag: vehicle-mapping-service +- mzId: CD_vehicle-mapping-service/management-zone/CDvehicle-mapping-service.id +- env: INT +- skipDeployment: "false" +CDvehicle-mapping-service-INT.CN-PreProd: +- name: CD_vehicle-mapping-service INT +- tag: vehicle-mapping-service +- mzId: CD_vehicle-mapping-service/management-zone/CDvehicle-mapping-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_vehicle-mapping-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_vehicle-mapping-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_vehicle-mapping-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_vehicle-mapping-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_vehicle-mapping-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-service/dashboard/README.md b/BMW-Dynatrace-config/CD_vehicle-mapping-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_vehicle-mapping-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..084094b3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDvehicle-mapping-service-PROD-E2E: defaultPRODE2E.json +- CDvehicle-mapping-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDvehicle-mapping-service-PROD-E2E: +- name: CD_vehicle-mapping-service PROD +- mzName: CD_vehicle-mapping-service/management-zone/CDvehicle-mapping-service.name +- mzId: CD_vehicle-mapping-service/management-zone/CDvehicle-mapping-service.id +- skipDeployment: "true" +#Configuration +CDvehicle-mapping-service-PROD-E2E.EMEA-Prod: +- name: CD_vehicle-mapping-service PROD +- mzName: CD_vehicle-mapping-service/management-zone/CDvehicle-mapping-service.name +- mzId: CD_vehicle-mapping-service/management-zone/CDvehicle-mapping-service.id +- tag: vehicle-mapping-service +- skipDeployment: "false" +CDvehicle-mapping-service-PROD-E2E.NA-Prod: +- name: CD_vehicle-mapping-service PROD +- mzName: CD_vehicle-mapping-service/management-zone/CDvehicle-mapping-service.name +- mzId: CD_vehicle-mapping-service/management-zone/CDvehicle-mapping-service.id +- tag: vehicle-mapping-service +- skipDeployment: "false" +CDvehicle-mapping-service-PROD-E2E.CN-Prod: +- name: CD_vehicle-mapping-service PROD +- mzName: CD_vehicle-mapping-service/management-zone/CDvehicle-mapping-service.name +- mzId: CD_vehicle-mapping-service/management-zone/CDvehicle-mapping-service.id +- tag: vehicle-mapping-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDvehicle-mapping-service-INT-TEST: +- name: CD_vehicle-mapping-service INT-TEST +- mzName: CD_vehicle-mapping-service/management-zone/CDvehicle-mapping-service.name +- mzId: CD_vehicle-mapping-service/management-zone/CDvehicle-mapping-service.id +- tag: vehicle-mapping-service +- skipDeployment: "true" +#Configuration +CDvehicle-mapping-service-INT-TEST.EMEA-PreProd: +- name: CD_vehicle-mapping-service INT-TEST +- mzName: CD_vehicle-mapping-service/management-zone/CDvehicle-mapping-service.name +- mzId: CD_vehicle-mapping-service/management-zone/CDvehicle-mapping-service.id +- tag: vehicle-mapping-service +- skipDeployment: "false" +CDvehicle-mapping-service-INT-TEST.NA-PreProd: +- name: CD_vehicle-mapping-service INT-TEST +- mzName: CD_vehicle-mapping-service/management-zone/CDvehicle-mapping-service.name +- mzId: CD_vehicle-mapping-service/management-zone/CDvehicle-mapping-service.id +- env: INT +- skipDeployment: "false" +CDvehicle-mapping-service-INT-TEST.CN-PreProd: +- name: CD_vehicle-mapping-service INT-TEST +- mzName: CD_vehicle-mapping-service/management-zone/CDvehicle-mapping-service.name +- mzId: CD_vehicle-mapping-service/management-zone/CDvehicle-mapping-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_vehicle-mapping-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_vehicle-mapping-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-service/management-zone/README.md b/BMW-Dynatrace-config/CD_vehicle-mapping-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-service/management-zone/default.json b/BMW-Dynatrace-config/CD_vehicle-mapping-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_vehicle-mapping-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..de4ac0ac --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDvehicle-mapping-service: default.json + +CDvehicle-mapping-service: +- name: CD_vehicle-mapping-service +- tag: vehicle-mapping-service diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-service/notification/README.md b/BMW-Dynatrace-config/CD_vehicle-mapping-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-service/notification/email.json b/BMW-Dynatrace-config/CD_vehicle-mapping-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_vehicle-mapping-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_vehicle-mapping-service/notification/notification.yaml new file mode 100644 index 00000000..809d87cb --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDvehicle-mapping-service-PROD: msTeams.json +- CDvehicle-mapping-service-E2E: msTeams.json +- CDvehicle-mapping-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-mapping-service-PROD: +- name: CD_vehicle-mapping-service PROD +- alertingProfile: CD_vehicle-mapping-service/alerting-profile/CDvehicle-mapping-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-mapping-service-PROD.EMEA-Prod: +- name: CD_vehicle-mapping-service PROD +- alertingProfile: CD_vehicle-mapping-service/alerting-profile/CDvehicle-mapping-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-mapping-service-PROD.NA-Prod: +- name: CD_vehicle-mapping-service PROD +- alertingProfile: CD_vehicle-mapping-service/alerting-profile/CDvehicle-mapping-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-mapping-service-PROD.CN-Prod: +- name: CD_vehicle-mapping-service PROD +- alertingProfile: CD_vehicle-mapping-service/alerting-profile/CDvehicle-mapping-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-mapping-service-E2E: +- name: CD_vehicle-mapping-service E2E +- alertingProfile: CD_vehicle-mapping-service/alerting-profile/CDvehicle-mapping-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-mapping-service-E2E.EMEA-Prod: +- name: CD_vehicle-mapping-service E2E +- alertingProfile: CD_vehicle-mapping-service/alerting-profile/CDvehicle-mapping-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-mapping-service-E2E.NA-Prod: +- name: CD_vehicle-mapping-service E2E +- alertingProfile: CD_vehicle-mapping-service/alerting-profile/CDvehicle-mapping-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-mapping-service-E2E.CN-Prod: +- name: CD_vehicle-mapping-service E2E +- alertingProfile: CD_vehicle-mapping-service/alerting-profile/CDvehicle-mapping-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-mapping-service-INT: +- name: CD_vehicle-mapping-service INT +- alertingProfile: CD_vehicle-mapping-service/alerting-profile/CDvehicle-mapping-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-mapping-service-INT.EMEA-PreProd: +- name: CD_vehicle-mapping-service INT +- alertingProfile: CD_vehicle-mapping-service/alerting-profile/CDvehicle-mapping-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-mapping-service-INT.NA-PreProd: +- name: CD_vehicle-mapping-service INT +- alertingProfile: CD_vehicle-mapping-service/alerting-profile/CDvehicle-mapping-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-mapping-service-INT.CN-PreProd: +- name: CD_vehicle-mapping-service INT +- alertingProfile: CD_vehicle-mapping-service/alerting-profile/CDvehicle-mapping-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_vehicle-mapping-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_vehicle-mapping-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_vehicle-mapping-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..4f937e9b --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- vehicle-mapping-service: default.json + +vehicle-mapping-service: +- name: CD_vehicle-mapping-service - +- mzName: CD_vehicle-mapping-service/management-zone/CDvehicle-mapping-service.name +- mzId: CD_vehicle-mapping-service/management-zone/CDvehicle-mapping-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/alerting-profile/alerting-profile.yaml index 8704b85d..500ab476 100644 --- a/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/alerting-profile/alerting-profile.yaml +++ b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/alerting-profile/alerting-profile.yaml @@ -1,6 +1,88 @@ -CDvehicle-remote-commands-composite-service: -- name: CD_vehicle-remote-commands-composite-service/management-zone/CDvehicle-remote-commands-composite-service.name +config: +- CDvehicle-remote-commands-composite-service-PROD: default.json +- CDvehicle-remote-commands-composite-service-E2E: default.json +- CDvehicle-remote-commands-composite-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-remote-commands-composite-service-PROD: +- name: CD_vehicle-remote-commands-composite-service PROD - tag: vehicle-remote-commands-composite-service - mzId: CD_vehicle-remote-commands-composite-service/management-zone/CDvehicle-remote-commands-composite-service.id -config: -- CDvehicle-remote-commands-composite-service: vehicle-remote-commands-composite-service.json +- env: PROD +- skipDeployment: "true" +#Configuration +CDvehicle-remote-commands-composite-service-PROD.EMEA-Prod: +- name: CD_vehicle-remote-commands-composite-service PROD +- tag: vehicle-remote-commands-composite-service +- mzId: CD_vehicle-remote-commands-composite-service/management-zone/CDvehicle-remote-commands-composite-service.id +- env: PROD +- skipDeployment: "false" +CDvehicle-remote-commands-composite-service-PROD.NA-Prod: +- name: CD_vehicle-remote-commands-composite-service PROD +- tag: vehicle-remote-commands-composite-service +- mzId: CD_vehicle-remote-commands-composite-service/management-zone/CDvehicle-remote-commands-composite-service.id +- env: PROD +- skipDeployment: "false" +CDvehicle-remote-commands-composite-service-PROD.CN-Prod: +- name: CD_vehicle-remote-commands-composite-service PROD +- tag: vehicle-remote-commands-composite-service +- mzId: CD_vehicle-remote-commands-composite-service/management-zone/CDvehicle-remote-commands-composite-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-remote-commands-composite-service-E2E: +- name: CD_vehicle-remote-commands-composite-service E2E +- tag: vehicle-remote-commands-composite-service +- mzId: CD_vehicle-remote-commands-composite-service/management-zone/CDvehicle-remote-commands-composite-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDvehicle-remote-commands-composite-service-E2E.EMEA-Prod: +- name: CD_vehicle-remote-commands-composite-service E2E +- tag: vehicle-remote-commands-composite-service +- mzId: CD_vehicle-remote-commands-composite-service/management-zone/CDvehicle-remote-commands-composite-service.id +- env: E2E +- skipDeployment: "false" +CDvehicle-remote-commands-composite-service-E2E.NA-Prod: +- name: CD_vehicle-remote-commands-composite-service E2E +- tag: vehicle-remote-commands-composite-service +- mzId: CD_vehicle-remote-commands-composite-service/management-zone/CDvehicle-remote-commands-composite-service.id +- env: E2E +- skipDeployment: "false" +CDvehicle-remote-commands-composite-service-E2E.CN-Prod: +- name: CD_vehicle-remote-commands-composite-service E2E +- tag: vehicle-remote-commands-composite-service +- mzId: CD_vehicle-remote-commands-composite-service/management-zone/CDvehicle-remote-commands-composite-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-remote-commands-composite-service-INT: +- name: CD_vehicle-remote-commands-composite-service INT +- tag: vehicle-remote-commands-composite-service +- mzId: CD_vehicle-remote-commands-composite-service/management-zone/CDvehicle-remote-commands-composite-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDvehicle-remote-commands-composite-service-INT.EMEA-PreProd: +- name: CD_vehicle-remote-commands-composite-service INT +- tag: vehicle-remote-commands-composite-service +- mzId: CD_vehicle-remote-commands-composite-service/management-zone/CDvehicle-remote-commands-composite-service.id +- env: INT +- skipDeployment: "false" +CDvehicle-remote-commands-composite-service-INT.NA-PreProd: +- name: CD_vehicle-remote-commands-composite-service INT +- tag: vehicle-remote-commands-composite-service +- mzId: CD_vehicle-remote-commands-composite-service/management-zone/CDvehicle-remote-commands-composite-service.id +- env: INT +- skipDeployment: "false" +CDvehicle-remote-commands-composite-service-INT.CN-PreProd: +- name: CD_vehicle-remote-commands-composite-service INT +- tag: vehicle-remote-commands-composite-service +- mzId: CD_vehicle-remote-commands-composite-service/management-zone/CDvehicle-remote-commands-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/alerting-profile/vehicle-remote-commands-composite-service.json b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/alerting-profile/vehicle-remote-commands-composite-service.json deleted file mode 100644 index d10ad44a..00000000 --- a/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/alerting-profile/vehicle-remote-commands-composite-service.json +++ /dev/null @@ -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}}" - } - ] - } - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/dashboard/README.md b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..795dcbc6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDvehicle-remote-commands-composite-service-PROD-E2E: defaultPRODE2E.json +- CDvehicle-remote-commands-composite-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDvehicle-remote-commands-composite-service-PROD-E2E: +- name: CD_vehicle-remote-commands-composite-service PROD +- mzName: CD_vehicle-remote-commands-composite-service/management-zone/CDvehicle-remote-commands-composite-service.name +- mzId: CD_vehicle-remote-commands-composite-service/management-zone/CDvehicle-remote-commands-composite-service.id +- skipDeployment: "true" +#Configuration +CDvehicle-remote-commands-composite-service-PROD-E2E.EMEA-Prod: +- name: CD_vehicle-remote-commands-composite-service PROD +- mzName: CD_vehicle-remote-commands-composite-service/management-zone/CDvehicle-remote-commands-composite-service.name +- mzId: CD_vehicle-remote-commands-composite-service/management-zone/CDvehicle-remote-commands-composite-service.id +- tag: vehicle-remote-commands-composite-service +- skipDeployment: "false" +CDvehicle-remote-commands-composite-service-PROD-E2E.NA-Prod: +- name: CD_vehicle-remote-commands-composite-service PROD +- mzName: CD_vehicle-remote-commands-composite-service/management-zone/CDvehicle-remote-commands-composite-service.name +- mzId: CD_vehicle-remote-commands-composite-service/management-zone/CDvehicle-remote-commands-composite-service.id +- tag: vehicle-remote-commands-composite-service +- skipDeployment: "false" +CDvehicle-remote-commands-composite-service-PROD-E2E.CN-Prod: +- name: CD_vehicle-remote-commands-composite-service PROD +- mzName: CD_vehicle-remote-commands-composite-service/management-zone/CDvehicle-remote-commands-composite-service.name +- mzId: CD_vehicle-remote-commands-composite-service/management-zone/CDvehicle-remote-commands-composite-service.id +- tag: vehicle-remote-commands-composite-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDvehicle-remote-commands-composite-service-INT-TEST: +- name: CD_vehicle-remote-commands-composite-service INT-TEST +- mzName: CD_vehicle-remote-commands-composite-service/management-zone/CDvehicle-remote-commands-composite-service.name +- mzId: CD_vehicle-remote-commands-composite-service/management-zone/CDvehicle-remote-commands-composite-service.id +- tag: vehicle-remote-commands-composite-service +- skipDeployment: "true" +#Configuration +CDvehicle-remote-commands-composite-service-INT-TEST.EMEA-PreProd: +- name: CD_vehicle-remote-commands-composite-service INT-TEST +- mzName: CD_vehicle-remote-commands-composite-service/management-zone/CDvehicle-remote-commands-composite-service.name +- mzId: CD_vehicle-remote-commands-composite-service/management-zone/CDvehicle-remote-commands-composite-service.id +- tag: vehicle-remote-commands-composite-service +- skipDeployment: "false" +CDvehicle-remote-commands-composite-service-INT-TEST.NA-PreProd: +- name: CD_vehicle-remote-commands-composite-service INT-TEST +- mzName: CD_vehicle-remote-commands-composite-service/management-zone/CDvehicle-remote-commands-composite-service.name +- mzId: CD_vehicle-remote-commands-composite-service/management-zone/CDvehicle-remote-commands-composite-service.id +- env: INT +- skipDeployment: "false" +CDvehicle-remote-commands-composite-service-INT-TEST.CN-PreProd: +- name: CD_vehicle-remote-commands-composite-service INT-TEST +- mzName: CD_vehicle-remote-commands-composite-service/management-zone/CDvehicle-remote-commands-composite-service.name +- mzId: CD_vehicle-remote-commands-composite-service/management-zone/CDvehicle-remote-commands-composite-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/management-zone/CDvehicle-remote-commands-composite-service.json b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/management-zone/CDvehicle-remote-commands-composite-service.json deleted file mode 100644 index b2a9367b..00000000 --- a/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/management-zone/CDvehicle-remote-commands-composite-service.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "dimensionalRules": [], - "name": "{{.name}}", - "rules": [ - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "{{.tag}}" - } - }, - "key": { - "attribute": "SERVICE_TAGS" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "HealthResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PingResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PrometheusResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - } - ], - "enabled": true, - "propagationTypes": [ - "SERVICE_TO_PROCESS_GROUP_LIKE", - "SERVICE_TO_HOST_LIKE" - ], - "type": "SERVICE" - }, - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "{{.tag}}" - } - }, - "key": { - "attribute": "PROCESS_GROUP_TAGS" - } - } - ], - "enabled": true, - "propagationTypes": [ - "PROCESS_GROUP_TO_HOST" - ], - "type": "PROCESS_GROUP" - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/management-zone/README.md b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/management-zone/default.json b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/management-zone/management-zone.yaml index 8146a9bc..3fd6adf3 100644 --- a/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/management-zone/management-zone.yaml +++ b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/management-zone/management-zone.yaml @@ -1,20 +1,6 @@ -CDvehicle-remote-commands-composite-service.CN-PreProd: -- name: CD_vehicle-remote-commands-composite-service -- tag: vehicle-remote-commands-composite-service -CDvehicle-remote-commands-composite-service.CN-Prod: -- name: CD_vehicle-remote-commands-composite-service -- tag: vehicle-remote-commands-composite-service -CDvehicle-remote-commands-composite-service.EMEA-PreProd: -- name: CD_vehicle-remote-commands-composite-service -- tag: vehicle-remote-commands-composite-service -CDvehicle-remote-commands-composite-service.EMEA-Prod: -- name: CD_vehicle-remote-commands-composite-service -- tag: vehicle-remote-commands-composite-service -CDvehicle-remote-commands-composite-service.NA-PreProd: -- name: CD_vehicle-remote-commands-composite-service -- tag: vehicle-remote-commands-composite-service -CDvehicle-remote-commands-composite-service.NA-Prod: -- name: CD_vehicle-remote-commands-composite-service -- tag: vehicle-remote-commands-composite-service config: -- CDvehicle-remote-commands-composite-service: CDvehicle-remote-commands-composite-service.json +- CDvehicle-remote-commands-composite-service: default.json + +CDvehicle-remote-commands-composite-service: +- name: CD_vehicle-remote-commands-composite-service +- tag: vehicle-remote-commands-composite-service diff --git a/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/notification/README.md b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/notification/email.json b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/notification/notification.yaml new file mode 100644 index 00000000..c3306feb --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDvehicle-remote-commands-composite-service-PROD: msTeams.json +- CDvehicle-remote-commands-composite-service-E2E: msTeams.json +- CDvehicle-remote-commands-composite-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-remote-commands-composite-service-PROD: +- name: CD_vehicle-remote-commands-composite-service PROD +- alertingProfile: CD_vehicle-remote-commands-composite-service/alerting-profile/CDvehicle-remote-commands-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-remote-commands-composite-service-PROD.EMEA-Prod: +- name: CD_vehicle-remote-commands-composite-service PROD +- alertingProfile: CD_vehicle-remote-commands-composite-service/alerting-profile/CDvehicle-remote-commands-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-remote-commands-composite-service-PROD.NA-Prod: +- name: CD_vehicle-remote-commands-composite-service PROD +- alertingProfile: CD_vehicle-remote-commands-composite-service/alerting-profile/CDvehicle-remote-commands-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-remote-commands-composite-service-PROD.CN-Prod: +- name: CD_vehicle-remote-commands-composite-service PROD +- alertingProfile: CD_vehicle-remote-commands-composite-service/alerting-profile/CDvehicle-remote-commands-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-remote-commands-composite-service-E2E: +- name: CD_vehicle-remote-commands-composite-service E2E +- alertingProfile: CD_vehicle-remote-commands-composite-service/alerting-profile/CDvehicle-remote-commands-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-remote-commands-composite-service-E2E.EMEA-Prod: +- name: CD_vehicle-remote-commands-composite-service E2E +- alertingProfile: CD_vehicle-remote-commands-composite-service/alerting-profile/CDvehicle-remote-commands-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-remote-commands-composite-service-E2E.NA-Prod: +- name: CD_vehicle-remote-commands-composite-service E2E +- alertingProfile: CD_vehicle-remote-commands-composite-service/alerting-profile/CDvehicle-remote-commands-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-remote-commands-composite-service-E2E.CN-Prod: +- name: CD_vehicle-remote-commands-composite-service E2E +- alertingProfile: CD_vehicle-remote-commands-composite-service/alerting-profile/CDvehicle-remote-commands-composite-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-remote-commands-composite-service-INT: +- name: CD_vehicle-remote-commands-composite-service INT +- alertingProfile: CD_vehicle-remote-commands-composite-service/alerting-profile/CDvehicle-remote-commands-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-remote-commands-composite-service-INT.EMEA-PreProd: +- name: CD_vehicle-remote-commands-composite-service INT +- alertingProfile: CD_vehicle-remote-commands-composite-service/alerting-profile/CDvehicle-remote-commands-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-remote-commands-composite-service-INT.NA-PreProd: +- name: CD_vehicle-remote-commands-composite-service INT +- alertingProfile: CD_vehicle-remote-commands-composite-service/alerting-profile/CDvehicle-remote-commands-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-remote-commands-composite-service-INT.CN-PreProd: +- name: CD_vehicle-remote-commands-composite-service INT +- alertingProfile: CD_vehicle-remote-commands-composite-service/alerting-profile/CDvehicle-remote-commands-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..c8393629 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- vehicle-remote-commands-composite-service: default.json + +vehicle-remote-commands-composite-service: +- name: CD_vehicle-remote-commands-composite-service - +- mzName: CD_vehicle-remote-commands-composite-service/management-zone/CDvehicle-remote-commands-composite-service.name +- mzId: CD_vehicle-remote-commands-composite-service/management-zone/CDvehicle-remote-commands-composite-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-alert/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_vehicle-service-alert/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..7475e26a --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-alert/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDvehicle-service-alert-PROD: default.json +- CDvehicle-service-alert-E2E: default.json +- CDvehicle-service-alert-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-service-alert-PROD: +- name: CD_vehicle-service-alert PROD +- tag: vehicle-service-alert +- mzId: CD_vehicle-service-alert/management-zone/CDvehicle-service-alert.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDvehicle-service-alert-PROD.EMEA-Prod: +- name: CD_vehicle-service-alert PROD +- tag: vehicle-service-alert +- mzId: CD_vehicle-service-alert/management-zone/CDvehicle-service-alert.id +- env: PROD +- skipDeployment: "false" +CDvehicle-service-alert-PROD.NA-Prod: +- name: CD_vehicle-service-alert PROD +- tag: vehicle-service-alert +- mzId: CD_vehicle-service-alert/management-zone/CDvehicle-service-alert.id +- env: PROD +- skipDeployment: "false" +CDvehicle-service-alert-PROD.CN-Prod: +- name: CD_vehicle-service-alert PROD +- tag: vehicle-service-alert +- mzId: CD_vehicle-service-alert/management-zone/CDvehicle-service-alert.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-service-alert-E2E: +- name: CD_vehicle-service-alert E2E +- tag: vehicle-service-alert +- mzId: CD_vehicle-service-alert/management-zone/CDvehicle-service-alert.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDvehicle-service-alert-E2E.EMEA-Prod: +- name: CD_vehicle-service-alert E2E +- tag: vehicle-service-alert +- mzId: CD_vehicle-service-alert/management-zone/CDvehicle-service-alert.id +- env: E2E +- skipDeployment: "false" +CDvehicle-service-alert-E2E.NA-Prod: +- name: CD_vehicle-service-alert E2E +- tag: vehicle-service-alert +- mzId: CD_vehicle-service-alert/management-zone/CDvehicle-service-alert.id +- env: E2E +- skipDeployment: "false" +CDvehicle-service-alert-E2E.CN-Prod: +- name: CD_vehicle-service-alert E2E +- tag: vehicle-service-alert +- mzId: CD_vehicle-service-alert/management-zone/CDvehicle-service-alert.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-service-alert-INT: +- name: CD_vehicle-service-alert INT +- tag: vehicle-service-alert +- mzId: CD_vehicle-service-alert/management-zone/CDvehicle-service-alert.id +- env: INT +- skipDeployment: "true" +#Configuration +CDvehicle-service-alert-INT.EMEA-PreProd: +- name: CD_vehicle-service-alert INT +- tag: vehicle-service-alert +- mzId: CD_vehicle-service-alert/management-zone/CDvehicle-service-alert.id +- env: INT +- skipDeployment: "false" +CDvehicle-service-alert-INT.NA-PreProd: +- name: CD_vehicle-service-alert INT +- tag: vehicle-service-alert +- mzId: CD_vehicle-service-alert/management-zone/CDvehicle-service-alert.id +- env: INT +- skipDeployment: "false" +CDvehicle-service-alert-INT.CN-PreProd: +- name: CD_vehicle-service-alert INT +- tag: vehicle-service-alert +- mzId: CD_vehicle-service-alert/management-zone/CDvehicle-service-alert.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-alert/alerting-profile/default.json b/BMW-Dynatrace-config/CD_vehicle-service-alert/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-alert/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-alert/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_vehicle-service-alert/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-alert/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-alert/custom-service-java/README.md b/BMW-Dynatrace-config/CD_vehicle-service-alert/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-alert/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-alert/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_vehicle-service-alert/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-alert/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-alert/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_vehicle-service-alert/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-alert/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-alert/dashboard/README.md b/BMW-Dynatrace-config/CD_vehicle-service-alert/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-alert/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-alert/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_vehicle-service-alert/dashboard/dashboard.yaml new file mode 100644 index 00000000..acb856ef --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-alert/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDvehicle-service-alert-PROD-E2E: defaultPRODE2E.json +- CDvehicle-service-alert-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDvehicle-service-alert-PROD-E2E: +- name: CD_vehicle-service-alert PROD +- mzName: CD_vehicle-service-alert/management-zone/CDvehicle-service-alert.name +- mzId: CD_vehicle-service-alert/management-zone/CDvehicle-service-alert.id +- skipDeployment: "true" +#Configuration +CDvehicle-service-alert-PROD-E2E.EMEA-Prod: +- name: CD_vehicle-service-alert PROD +- mzName: CD_vehicle-service-alert/management-zone/CDvehicle-service-alert.name +- mzId: CD_vehicle-service-alert/management-zone/CDvehicle-service-alert.id +- tag: vehicle-service-alert +- skipDeployment: "false" +CDvehicle-service-alert-PROD-E2E.NA-Prod: +- name: CD_vehicle-service-alert PROD +- mzName: CD_vehicle-service-alert/management-zone/CDvehicle-service-alert.name +- mzId: CD_vehicle-service-alert/management-zone/CDvehicle-service-alert.id +- tag: vehicle-service-alert +- skipDeployment: "false" +CDvehicle-service-alert-PROD-E2E.CN-Prod: +- name: CD_vehicle-service-alert PROD +- mzName: CD_vehicle-service-alert/management-zone/CDvehicle-service-alert.name +- mzId: CD_vehicle-service-alert/management-zone/CDvehicle-service-alert.id +- tag: vehicle-service-alert +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDvehicle-service-alert-INT-TEST: +- name: CD_vehicle-service-alert INT-TEST +- mzName: CD_vehicle-service-alert/management-zone/CDvehicle-service-alert.name +- mzId: CD_vehicle-service-alert/management-zone/CDvehicle-service-alert.id +- tag: vehicle-service-alert +- skipDeployment: "true" +#Configuration +CDvehicle-service-alert-INT-TEST.EMEA-PreProd: +- name: CD_vehicle-service-alert INT-TEST +- mzName: CD_vehicle-service-alert/management-zone/CDvehicle-service-alert.name +- mzId: CD_vehicle-service-alert/management-zone/CDvehicle-service-alert.id +- tag: vehicle-service-alert +- skipDeployment: "false" +CDvehicle-service-alert-INT-TEST.NA-PreProd: +- name: CD_vehicle-service-alert INT-TEST +- mzName: CD_vehicle-service-alert/management-zone/CDvehicle-service-alert.name +- mzId: CD_vehicle-service-alert/management-zone/CDvehicle-service-alert.id +- env: INT +- skipDeployment: "false" +CDvehicle-service-alert-INT-TEST.CN-PreProd: +- name: CD_vehicle-service-alert INT-TEST +- mzName: CD_vehicle-service-alert/management-zone/CDvehicle-service-alert.name +- mzId: CD_vehicle-service-alert/management-zone/CDvehicle-service-alert.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-alert/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_vehicle-service-alert/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-alert/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-alert/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_vehicle-service-alert/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-alert/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-alert/management-zone/README.md b/BMW-Dynatrace-config/CD_vehicle-service-alert/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-alert/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_vehicle-service-alert/management-zone/default.json b/BMW-Dynatrace-config/CD_vehicle-service-alert/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-alert/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-alert/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_vehicle-service-alert/management-zone/management-zone.yaml new file mode 100644 index 00000000..0ca5b581 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-alert/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDvehicle-service-alert: default.json + +CDvehicle-service-alert: +- name: CD_vehicle-service-alert +- tag: vehicle-service-alert diff --git a/BMW-Dynatrace-config/CD_vehicle-service-alert/notification/README.md b/BMW-Dynatrace-config/CD_vehicle-service-alert/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-alert/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-alert/notification/email.json b/BMW-Dynatrace-config/CD_vehicle-service-alert/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-alert/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-alert/notification/msTeams.json b/BMW-Dynatrace-config/CD_vehicle-service-alert/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-alert/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-alert/notification/notification.yaml b/BMW-Dynatrace-config/CD_vehicle-service-alert/notification/notification.yaml new file mode 100644 index 00000000..633a1e31 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-alert/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDvehicle-service-alert-PROD: msTeams.json +- CDvehicle-service-alert-E2E: msTeams.json +- CDvehicle-service-alert-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-service-alert-PROD: +- name: CD_vehicle-service-alert PROD +- alertingProfile: CD_vehicle-service-alert/alerting-profile/CDvehicle-service-alert-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-service-alert-PROD.EMEA-Prod: +- name: CD_vehicle-service-alert PROD +- alertingProfile: CD_vehicle-service-alert/alerting-profile/CDvehicle-service-alert-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-service-alert-PROD.NA-Prod: +- name: CD_vehicle-service-alert PROD +- alertingProfile: CD_vehicle-service-alert/alerting-profile/CDvehicle-service-alert-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-service-alert-PROD.CN-Prod: +- name: CD_vehicle-service-alert PROD +- alertingProfile: CD_vehicle-service-alert/alerting-profile/CDvehicle-service-alert-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-service-alert-E2E: +- name: CD_vehicle-service-alert E2E +- alertingProfile: CD_vehicle-service-alert/alerting-profile/CDvehicle-service-alert-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-service-alert-E2E.EMEA-Prod: +- name: CD_vehicle-service-alert E2E +- alertingProfile: CD_vehicle-service-alert/alerting-profile/CDvehicle-service-alert-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-service-alert-E2E.NA-Prod: +- name: CD_vehicle-service-alert E2E +- alertingProfile: CD_vehicle-service-alert/alerting-profile/CDvehicle-service-alert-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-service-alert-E2E.CN-Prod: +- name: CD_vehicle-service-alert E2E +- alertingProfile: CD_vehicle-service-alert/alerting-profile/CDvehicle-service-alert-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-service-alert-INT: +- name: CD_vehicle-service-alert INT +- alertingProfile: CD_vehicle-service-alert/alerting-profile/CDvehicle-service-alert-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-service-alert-INT.EMEA-PreProd: +- name: CD_vehicle-service-alert INT +- alertingProfile: CD_vehicle-service-alert/alerting-profile/CDvehicle-service-alert-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-service-alert-INT.NA-PreProd: +- name: CD_vehicle-service-alert INT +- alertingProfile: CD_vehicle-service-alert/alerting-profile/CDvehicle-service-alert-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-service-alert-INT.CN-PreProd: +- name: CD_vehicle-service-alert INT +- alertingProfile: CD_vehicle-service-alert/alerting-profile/CDvehicle-service-alert-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-alert/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_vehicle-service-alert/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-alert/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-alert/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_vehicle-service-alert/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-alert/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-alert/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_vehicle-service-alert/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..b5780e3f --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-alert/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- vehicle-service-alert: default.json + +vehicle-service-alert: +- name: CD_vehicle-service-alert - +- mzName: CD_vehicle-service-alert/management-zone/CDvehicle-service-alert.name +- mzId: CD_vehicle-service-alert/management-zone/CDvehicle-service-alert.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-background/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_vehicle-service-background/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..d9d93608 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-background/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDvehicle-service-background-PROD: default.json +- CDvehicle-service-background-E2E: default.json +- CDvehicle-service-background-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-service-background-PROD: +- name: CD_vehicle-service-background PROD +- tag: vehicle-service-background +- mzId: CD_vehicle-service-background/management-zone/CDvehicle-service-background.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDvehicle-service-background-PROD.EMEA-Prod: +- name: CD_vehicle-service-background PROD +- tag: vehicle-service-background +- mzId: CD_vehicle-service-background/management-zone/CDvehicle-service-background.id +- env: PROD +- skipDeployment: "false" +CDvehicle-service-background-PROD.NA-Prod: +- name: CD_vehicle-service-background PROD +- tag: vehicle-service-background +- mzId: CD_vehicle-service-background/management-zone/CDvehicle-service-background.id +- env: PROD +- skipDeployment: "false" +CDvehicle-service-background-PROD.CN-Prod: +- name: CD_vehicle-service-background PROD +- tag: vehicle-service-background +- mzId: CD_vehicle-service-background/management-zone/CDvehicle-service-background.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-service-background-E2E: +- name: CD_vehicle-service-background E2E +- tag: vehicle-service-background +- mzId: CD_vehicle-service-background/management-zone/CDvehicle-service-background.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDvehicle-service-background-E2E.EMEA-Prod: +- name: CD_vehicle-service-background E2E +- tag: vehicle-service-background +- mzId: CD_vehicle-service-background/management-zone/CDvehicle-service-background.id +- env: E2E +- skipDeployment: "false" +CDvehicle-service-background-E2E.NA-Prod: +- name: CD_vehicle-service-background E2E +- tag: vehicle-service-background +- mzId: CD_vehicle-service-background/management-zone/CDvehicle-service-background.id +- env: E2E +- skipDeployment: "false" +CDvehicle-service-background-E2E.CN-Prod: +- name: CD_vehicle-service-background E2E +- tag: vehicle-service-background +- mzId: CD_vehicle-service-background/management-zone/CDvehicle-service-background.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-service-background-INT: +- name: CD_vehicle-service-background INT +- tag: vehicle-service-background +- mzId: CD_vehicle-service-background/management-zone/CDvehicle-service-background.id +- env: INT +- skipDeployment: "true" +#Configuration +CDvehicle-service-background-INT.EMEA-PreProd: +- name: CD_vehicle-service-background INT +- tag: vehicle-service-background +- mzId: CD_vehicle-service-background/management-zone/CDvehicle-service-background.id +- env: INT +- skipDeployment: "false" +CDvehicle-service-background-INT.NA-PreProd: +- name: CD_vehicle-service-background INT +- tag: vehicle-service-background +- mzId: CD_vehicle-service-background/management-zone/CDvehicle-service-background.id +- env: INT +- skipDeployment: "false" +CDvehicle-service-background-INT.CN-PreProd: +- name: CD_vehicle-service-background INT +- tag: vehicle-service-background +- mzId: CD_vehicle-service-background/management-zone/CDvehicle-service-background.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-background/alerting-profile/default.json b/BMW-Dynatrace-config/CD_vehicle-service-background/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-background/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-background/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_vehicle-service-background/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-background/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-background/custom-service-java/README.md b/BMW-Dynatrace-config/CD_vehicle-service-background/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-background/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-background/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_vehicle-service-background/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-background/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-background/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_vehicle-service-background/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-background/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-background/dashboard/README.md b/BMW-Dynatrace-config/CD_vehicle-service-background/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-background/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-background/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_vehicle-service-background/dashboard/dashboard.yaml new file mode 100644 index 00000000..3c108b69 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-background/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDvehicle-service-background-PROD-E2E: defaultPRODE2E.json +- CDvehicle-service-background-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDvehicle-service-background-PROD-E2E: +- name: CD_vehicle-service-background PROD +- mzName: CD_vehicle-service-background/management-zone/CDvehicle-service-background.name +- mzId: CD_vehicle-service-background/management-zone/CDvehicle-service-background.id +- skipDeployment: "true" +#Configuration +CDvehicle-service-background-PROD-E2E.EMEA-Prod: +- name: CD_vehicle-service-background PROD +- mzName: CD_vehicle-service-background/management-zone/CDvehicle-service-background.name +- mzId: CD_vehicle-service-background/management-zone/CDvehicle-service-background.id +- tag: vehicle-service-background +- skipDeployment: "false" +CDvehicle-service-background-PROD-E2E.NA-Prod: +- name: CD_vehicle-service-background PROD +- mzName: CD_vehicle-service-background/management-zone/CDvehicle-service-background.name +- mzId: CD_vehicle-service-background/management-zone/CDvehicle-service-background.id +- tag: vehicle-service-background +- skipDeployment: "false" +CDvehicle-service-background-PROD-E2E.CN-Prod: +- name: CD_vehicle-service-background PROD +- mzName: CD_vehicle-service-background/management-zone/CDvehicle-service-background.name +- mzId: CD_vehicle-service-background/management-zone/CDvehicle-service-background.id +- tag: vehicle-service-background +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDvehicle-service-background-INT-TEST: +- name: CD_vehicle-service-background INT-TEST +- mzName: CD_vehicle-service-background/management-zone/CDvehicle-service-background.name +- mzId: CD_vehicle-service-background/management-zone/CDvehicle-service-background.id +- tag: vehicle-service-background +- skipDeployment: "true" +#Configuration +CDvehicle-service-background-INT-TEST.EMEA-PreProd: +- name: CD_vehicle-service-background INT-TEST +- mzName: CD_vehicle-service-background/management-zone/CDvehicle-service-background.name +- mzId: CD_vehicle-service-background/management-zone/CDvehicle-service-background.id +- tag: vehicle-service-background +- skipDeployment: "false" +CDvehicle-service-background-INT-TEST.NA-PreProd: +- name: CD_vehicle-service-background INT-TEST +- mzName: CD_vehicle-service-background/management-zone/CDvehicle-service-background.name +- mzId: CD_vehicle-service-background/management-zone/CDvehicle-service-background.id +- env: INT +- skipDeployment: "false" +CDvehicle-service-background-INT-TEST.CN-PreProd: +- name: CD_vehicle-service-background INT-TEST +- mzName: CD_vehicle-service-background/management-zone/CDvehicle-service-background.name +- mzId: CD_vehicle-service-background/management-zone/CDvehicle-service-background.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-background/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_vehicle-service-background/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-background/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-background/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_vehicle-service-background/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-background/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-background/management-zone/README.md b/BMW-Dynatrace-config/CD_vehicle-service-background/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-background/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_vehicle-service-background/management-zone/default.json b/BMW-Dynatrace-config/CD_vehicle-service-background/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-background/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-background/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_vehicle-service-background/management-zone/management-zone.yaml new file mode 100644 index 00000000..2209d241 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-background/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDvehicle-service-background: default.json + +CDvehicle-service-background: +- name: CD_vehicle-service-background +- tag: vehicle-service-background diff --git a/BMW-Dynatrace-config/CD_vehicle-service-background/notification/README.md b/BMW-Dynatrace-config/CD_vehicle-service-background/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-background/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-background/notification/email.json b/BMW-Dynatrace-config/CD_vehicle-service-background/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-background/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-background/notification/msTeams.json b/BMW-Dynatrace-config/CD_vehicle-service-background/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-background/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-background/notification/notification.yaml b/BMW-Dynatrace-config/CD_vehicle-service-background/notification/notification.yaml new file mode 100644 index 00000000..81cd264d --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-background/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDvehicle-service-background-PROD: msTeams.json +- CDvehicle-service-background-E2E: msTeams.json +- CDvehicle-service-background-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-service-background-PROD: +- name: CD_vehicle-service-background PROD +- alertingProfile: CD_vehicle-service-background/alerting-profile/CDvehicle-service-background-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-service-background-PROD.EMEA-Prod: +- name: CD_vehicle-service-background PROD +- alertingProfile: CD_vehicle-service-background/alerting-profile/CDvehicle-service-background-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-service-background-PROD.NA-Prod: +- name: CD_vehicle-service-background PROD +- alertingProfile: CD_vehicle-service-background/alerting-profile/CDvehicle-service-background-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-service-background-PROD.CN-Prod: +- name: CD_vehicle-service-background PROD +- alertingProfile: CD_vehicle-service-background/alerting-profile/CDvehicle-service-background-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-service-background-E2E: +- name: CD_vehicle-service-background E2E +- alertingProfile: CD_vehicle-service-background/alerting-profile/CDvehicle-service-background-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-service-background-E2E.EMEA-Prod: +- name: CD_vehicle-service-background E2E +- alertingProfile: CD_vehicle-service-background/alerting-profile/CDvehicle-service-background-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-service-background-E2E.NA-Prod: +- name: CD_vehicle-service-background E2E +- alertingProfile: CD_vehicle-service-background/alerting-profile/CDvehicle-service-background-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-service-background-E2E.CN-Prod: +- name: CD_vehicle-service-background E2E +- alertingProfile: CD_vehicle-service-background/alerting-profile/CDvehicle-service-background-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-service-background-INT: +- name: CD_vehicle-service-background INT +- alertingProfile: CD_vehicle-service-background/alerting-profile/CDvehicle-service-background-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-service-background-INT.EMEA-PreProd: +- name: CD_vehicle-service-background INT +- alertingProfile: CD_vehicle-service-background/alerting-profile/CDvehicle-service-background-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-service-background-INT.NA-PreProd: +- name: CD_vehicle-service-background INT +- alertingProfile: CD_vehicle-service-background/alerting-profile/CDvehicle-service-background-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-service-background-INT.CN-PreProd: +- name: CD_vehicle-service-background INT +- alertingProfile: CD_vehicle-service-background/alerting-profile/CDvehicle-service-background-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-background/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_vehicle-service-background/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-background/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-background/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_vehicle-service-background/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-background/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-background/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_vehicle-service-background/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..16593cf8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-background/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- vehicle-service-background: default.json + +vehicle-service-background: +- name: CD_vehicle-service-background - +- mzName: CD_vehicle-service-background/management-zone/CDvehicle-service-background.name +- mzId: CD_vehicle-service-background/management-zone/CDvehicle-service-background.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-staging/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_vehicle-service-staging/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..1c999d77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-staging/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDvehicle-service-staging-PROD: default.json +- CDvehicle-service-staging-E2E: default.json +- CDvehicle-service-staging-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-service-staging-PROD: +- name: CD_vehicle-service-staging PROD +- tag: vehicle-service-staging +- mzId: CD_vehicle-service-staging/management-zone/CDvehicle-service-staging.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDvehicle-service-staging-PROD.EMEA-Prod: +- name: CD_vehicle-service-staging PROD +- tag: vehicle-service-staging +- mzId: CD_vehicle-service-staging/management-zone/CDvehicle-service-staging.id +- env: PROD +- skipDeployment: "false" +CDvehicle-service-staging-PROD.NA-Prod: +- name: CD_vehicle-service-staging PROD +- tag: vehicle-service-staging +- mzId: CD_vehicle-service-staging/management-zone/CDvehicle-service-staging.id +- env: PROD +- skipDeployment: "false" +CDvehicle-service-staging-PROD.CN-Prod: +- name: CD_vehicle-service-staging PROD +- tag: vehicle-service-staging +- mzId: CD_vehicle-service-staging/management-zone/CDvehicle-service-staging.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-service-staging-E2E: +- name: CD_vehicle-service-staging E2E +- tag: vehicle-service-staging +- mzId: CD_vehicle-service-staging/management-zone/CDvehicle-service-staging.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDvehicle-service-staging-E2E.EMEA-Prod: +- name: CD_vehicle-service-staging E2E +- tag: vehicle-service-staging +- mzId: CD_vehicle-service-staging/management-zone/CDvehicle-service-staging.id +- env: E2E +- skipDeployment: "false" +CDvehicle-service-staging-E2E.NA-Prod: +- name: CD_vehicle-service-staging E2E +- tag: vehicle-service-staging +- mzId: CD_vehicle-service-staging/management-zone/CDvehicle-service-staging.id +- env: E2E +- skipDeployment: "false" +CDvehicle-service-staging-E2E.CN-Prod: +- name: CD_vehicle-service-staging E2E +- tag: vehicle-service-staging +- mzId: CD_vehicle-service-staging/management-zone/CDvehicle-service-staging.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-service-staging-INT: +- name: CD_vehicle-service-staging INT +- tag: vehicle-service-staging +- mzId: CD_vehicle-service-staging/management-zone/CDvehicle-service-staging.id +- env: INT +- skipDeployment: "true" +#Configuration +CDvehicle-service-staging-INT.EMEA-PreProd: +- name: CD_vehicle-service-staging INT +- tag: vehicle-service-staging +- mzId: CD_vehicle-service-staging/management-zone/CDvehicle-service-staging.id +- env: INT +- skipDeployment: "false" +CDvehicle-service-staging-INT.NA-PreProd: +- name: CD_vehicle-service-staging INT +- tag: vehicle-service-staging +- mzId: CD_vehicle-service-staging/management-zone/CDvehicle-service-staging.id +- env: INT +- skipDeployment: "false" +CDvehicle-service-staging-INT.CN-PreProd: +- name: CD_vehicle-service-staging INT +- tag: vehicle-service-staging +- mzId: CD_vehicle-service-staging/management-zone/CDvehicle-service-staging.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-staging/alerting-profile/default.json b/BMW-Dynatrace-config/CD_vehicle-service-staging/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-staging/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-staging/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_vehicle-service-staging/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-staging/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-staging/custom-service-java/README.md b/BMW-Dynatrace-config/CD_vehicle-service-staging/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-staging/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-staging/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_vehicle-service-staging/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-staging/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-staging/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_vehicle-service-staging/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-staging/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-staging/dashboard/README.md b/BMW-Dynatrace-config/CD_vehicle-service-staging/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-staging/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-staging/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_vehicle-service-staging/dashboard/dashboard.yaml new file mode 100644 index 00000000..f4a454a8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-staging/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDvehicle-service-staging-PROD-E2E: defaultPRODE2E.json +- CDvehicle-service-staging-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDvehicle-service-staging-PROD-E2E: +- name: CD_vehicle-service-staging PROD +- mzName: CD_vehicle-service-staging/management-zone/CDvehicle-service-staging.name +- mzId: CD_vehicle-service-staging/management-zone/CDvehicle-service-staging.id +- skipDeployment: "true" +#Configuration +CDvehicle-service-staging-PROD-E2E.EMEA-Prod: +- name: CD_vehicle-service-staging PROD +- mzName: CD_vehicle-service-staging/management-zone/CDvehicle-service-staging.name +- mzId: CD_vehicle-service-staging/management-zone/CDvehicle-service-staging.id +- tag: vehicle-service-staging +- skipDeployment: "false" +CDvehicle-service-staging-PROD-E2E.NA-Prod: +- name: CD_vehicle-service-staging PROD +- mzName: CD_vehicle-service-staging/management-zone/CDvehicle-service-staging.name +- mzId: CD_vehicle-service-staging/management-zone/CDvehicle-service-staging.id +- tag: vehicle-service-staging +- skipDeployment: "false" +CDvehicle-service-staging-PROD-E2E.CN-Prod: +- name: CD_vehicle-service-staging PROD +- mzName: CD_vehicle-service-staging/management-zone/CDvehicle-service-staging.name +- mzId: CD_vehicle-service-staging/management-zone/CDvehicle-service-staging.id +- tag: vehicle-service-staging +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDvehicle-service-staging-INT-TEST: +- name: CD_vehicle-service-staging INT-TEST +- mzName: CD_vehicle-service-staging/management-zone/CDvehicle-service-staging.name +- mzId: CD_vehicle-service-staging/management-zone/CDvehicle-service-staging.id +- tag: vehicle-service-staging +- skipDeployment: "true" +#Configuration +CDvehicle-service-staging-INT-TEST.EMEA-PreProd: +- name: CD_vehicle-service-staging INT-TEST +- mzName: CD_vehicle-service-staging/management-zone/CDvehicle-service-staging.name +- mzId: CD_vehicle-service-staging/management-zone/CDvehicle-service-staging.id +- tag: vehicle-service-staging +- skipDeployment: "false" +CDvehicle-service-staging-INT-TEST.NA-PreProd: +- name: CD_vehicle-service-staging INT-TEST +- mzName: CD_vehicle-service-staging/management-zone/CDvehicle-service-staging.name +- mzId: CD_vehicle-service-staging/management-zone/CDvehicle-service-staging.id +- env: INT +- skipDeployment: "false" +CDvehicle-service-staging-INT-TEST.CN-PreProd: +- name: CD_vehicle-service-staging INT-TEST +- mzName: CD_vehicle-service-staging/management-zone/CDvehicle-service-staging.name +- mzId: CD_vehicle-service-staging/management-zone/CDvehicle-service-staging.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-staging/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_vehicle-service-staging/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-staging/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-staging/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_vehicle-service-staging/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-staging/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-staging/management-zone/README.md b/BMW-Dynatrace-config/CD_vehicle-service-staging/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-staging/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_vehicle-service-staging/management-zone/default.json b/BMW-Dynatrace-config/CD_vehicle-service-staging/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-staging/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-staging/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_vehicle-service-staging/management-zone/management-zone.yaml new file mode 100644 index 00000000..36c64b7b --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-staging/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDvehicle-service-staging: default.json + +CDvehicle-service-staging: +- name: CD_vehicle-service-staging +- tag: vehicle-service-staging diff --git a/BMW-Dynatrace-config/CD_vehicle-service-staging/notification/README.md b/BMW-Dynatrace-config/CD_vehicle-service-staging/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-staging/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-staging/notification/email.json b/BMW-Dynatrace-config/CD_vehicle-service-staging/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-staging/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-staging/notification/msTeams.json b/BMW-Dynatrace-config/CD_vehicle-service-staging/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-staging/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-staging/notification/notification.yaml b/BMW-Dynatrace-config/CD_vehicle-service-staging/notification/notification.yaml new file mode 100644 index 00000000..26224836 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-staging/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDvehicle-service-staging-PROD: msTeams.json +- CDvehicle-service-staging-E2E: msTeams.json +- CDvehicle-service-staging-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-service-staging-PROD: +- name: CD_vehicle-service-staging PROD +- alertingProfile: CD_vehicle-service-staging/alerting-profile/CDvehicle-service-staging-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-service-staging-PROD.EMEA-Prod: +- name: CD_vehicle-service-staging PROD +- alertingProfile: CD_vehicle-service-staging/alerting-profile/CDvehicle-service-staging-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-service-staging-PROD.NA-Prod: +- name: CD_vehicle-service-staging PROD +- alertingProfile: CD_vehicle-service-staging/alerting-profile/CDvehicle-service-staging-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-service-staging-PROD.CN-Prod: +- name: CD_vehicle-service-staging PROD +- alertingProfile: CD_vehicle-service-staging/alerting-profile/CDvehicle-service-staging-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-service-staging-E2E: +- name: CD_vehicle-service-staging E2E +- alertingProfile: CD_vehicle-service-staging/alerting-profile/CDvehicle-service-staging-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-service-staging-E2E.EMEA-Prod: +- name: CD_vehicle-service-staging E2E +- alertingProfile: CD_vehicle-service-staging/alerting-profile/CDvehicle-service-staging-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-service-staging-E2E.NA-Prod: +- name: CD_vehicle-service-staging E2E +- alertingProfile: CD_vehicle-service-staging/alerting-profile/CDvehicle-service-staging-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-service-staging-E2E.CN-Prod: +- name: CD_vehicle-service-staging E2E +- alertingProfile: CD_vehicle-service-staging/alerting-profile/CDvehicle-service-staging-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-service-staging-INT: +- name: CD_vehicle-service-staging INT +- alertingProfile: CD_vehicle-service-staging/alerting-profile/CDvehicle-service-staging-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-service-staging-INT.EMEA-PreProd: +- name: CD_vehicle-service-staging INT +- alertingProfile: CD_vehicle-service-staging/alerting-profile/CDvehicle-service-staging-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-service-staging-INT.NA-PreProd: +- name: CD_vehicle-service-staging INT +- alertingProfile: CD_vehicle-service-staging/alerting-profile/CDvehicle-service-staging-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-service-staging-INT.CN-PreProd: +- name: CD_vehicle-service-staging INT +- alertingProfile: CD_vehicle-service-staging/alerting-profile/CDvehicle-service-staging-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-staging/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_vehicle-service-staging/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-staging/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-staging/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_vehicle-service-staging/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-staging/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-staging/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_vehicle-service-staging/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..1c7bf967 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-staging/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- vehicle-service-staging: default.json + +vehicle-service-staging: +- name: CD_vehicle-service-staging - +- mzName: CD_vehicle-service-staging/management-zone/CDvehicle-service-staging.name +- mzId: CD_vehicle-service-staging/management-zone/CDvehicle-service-staging.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_vehicle-service/alerting-profile/alerting-profile.yaml index bfc6590f..50bd9b54 100644 --- a/BMW-Dynatrace-config/CD_vehicle-service/alerting-profile/alerting-profile.yaml +++ b/BMW-Dynatrace-config/CD_vehicle-service/alerting-profile/alerting-profile.yaml @@ -1,6 +1,88 @@ -CDvehicle-service: -- name: CD_vehicle-service/management-zone/CDvehicle-service.name +config: +- CDvehicle-service-PROD: default.json +- CDvehicle-service-E2E: default.json +- CDvehicle-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-service-PROD: +- name: CD_vehicle-service PROD - tag: vehicle-service - mzId: CD_vehicle-service/management-zone/CDvehicle-service.id -config: -- CDvehicle-service: vehicle-service.json +- env: PROD +- skipDeployment: "true" +#Configuration +CDvehicle-service-PROD.EMEA-Prod: +- name: CD_vehicle-service PROD +- tag: vehicle-service +- mzId: CD_vehicle-service/management-zone/CDvehicle-service.id +- env: PROD +- skipDeployment: "false" +CDvehicle-service-PROD.NA-Prod: +- name: CD_vehicle-service PROD +- tag: vehicle-service +- mzId: CD_vehicle-service/management-zone/CDvehicle-service.id +- env: PROD +- skipDeployment: "false" +CDvehicle-service-PROD.CN-Prod: +- name: CD_vehicle-service PROD +- tag: vehicle-service +- mzId: CD_vehicle-service/management-zone/CDvehicle-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-service-E2E: +- name: CD_vehicle-service E2E +- tag: vehicle-service +- mzId: CD_vehicle-service/management-zone/CDvehicle-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDvehicle-service-E2E.EMEA-Prod: +- name: CD_vehicle-service E2E +- tag: vehicle-service +- mzId: CD_vehicle-service/management-zone/CDvehicle-service.id +- env: E2E +- skipDeployment: "false" +CDvehicle-service-E2E.NA-Prod: +- name: CD_vehicle-service E2E +- tag: vehicle-service +- mzId: CD_vehicle-service/management-zone/CDvehicle-service.id +- env: E2E +- skipDeployment: "false" +CDvehicle-service-E2E.CN-Prod: +- name: CD_vehicle-service E2E +- tag: vehicle-service +- mzId: CD_vehicle-service/management-zone/CDvehicle-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-service-INT: +- name: CD_vehicle-service INT +- tag: vehicle-service +- mzId: CD_vehicle-service/management-zone/CDvehicle-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDvehicle-service-INT.EMEA-PreProd: +- name: CD_vehicle-service INT +- tag: vehicle-service +- mzId: CD_vehicle-service/management-zone/CDvehicle-service.id +- env: INT +- skipDeployment: "false" +CDvehicle-service-INT.NA-PreProd: +- name: CD_vehicle-service INT +- tag: vehicle-service +- mzId: CD_vehicle-service/management-zone/CDvehicle-service.id +- env: INT +- skipDeployment: "false" +CDvehicle-service-INT.CN-PreProd: +- name: CD_vehicle-service INT +- tag: vehicle-service +- mzId: CD_vehicle-service/management-zone/CDvehicle-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_vehicle-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service/alerting-profile/vehicle-service.json b/BMW-Dynatrace-config/CD_vehicle-service/alerting-profile/vehicle-service.json deleted file mode 100644 index d10ad44a..00000000 --- a/BMW-Dynatrace-config/CD_vehicle-service/alerting-profile/vehicle-service.json +++ /dev/null @@ -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}}" - } - ] - } - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_vehicle-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_vehicle-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_vehicle-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_vehicle-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service/dashboard/README.md b/BMW-Dynatrace-config/CD_vehicle-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_vehicle-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..6a2e1116 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDvehicle-service-PROD-E2E: defaultPRODE2E.json +- CDvehicle-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDvehicle-service-PROD-E2E: +- name: CD_vehicle-service PROD +- mzName: CD_vehicle-service/management-zone/CDvehicle-service.name +- mzId: CD_vehicle-service/management-zone/CDvehicle-service.id +- skipDeployment: "true" +#Configuration +CDvehicle-service-PROD-E2E.EMEA-Prod: +- name: CD_vehicle-service PROD +- mzName: CD_vehicle-service/management-zone/CDvehicle-service.name +- mzId: CD_vehicle-service/management-zone/CDvehicle-service.id +- tag: vehicle-service +- skipDeployment: "false" +CDvehicle-service-PROD-E2E.NA-Prod: +- name: CD_vehicle-service PROD +- mzName: CD_vehicle-service/management-zone/CDvehicle-service.name +- mzId: CD_vehicle-service/management-zone/CDvehicle-service.id +- tag: vehicle-service +- skipDeployment: "false" +CDvehicle-service-PROD-E2E.CN-Prod: +- name: CD_vehicle-service PROD +- mzName: CD_vehicle-service/management-zone/CDvehicle-service.name +- mzId: CD_vehicle-service/management-zone/CDvehicle-service.id +- tag: vehicle-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDvehicle-service-INT-TEST: +- name: CD_vehicle-service INT-TEST +- mzName: CD_vehicle-service/management-zone/CDvehicle-service.name +- mzId: CD_vehicle-service/management-zone/CDvehicle-service.id +- tag: vehicle-service +- skipDeployment: "true" +#Configuration +CDvehicle-service-INT-TEST.EMEA-PreProd: +- name: CD_vehicle-service INT-TEST +- mzName: CD_vehicle-service/management-zone/CDvehicle-service.name +- mzId: CD_vehicle-service/management-zone/CDvehicle-service.id +- tag: vehicle-service +- skipDeployment: "false" +CDvehicle-service-INT-TEST.NA-PreProd: +- name: CD_vehicle-service INT-TEST +- mzName: CD_vehicle-service/management-zone/CDvehicle-service.name +- mzId: CD_vehicle-service/management-zone/CDvehicle-service.id +- env: INT +- skipDeployment: "false" +CDvehicle-service-INT-TEST.CN-PreProd: +- name: CD_vehicle-service INT-TEST +- mzName: CD_vehicle-service/management-zone/CDvehicle-service.name +- mzId: CD_vehicle-service/management-zone/CDvehicle-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_vehicle-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_vehicle-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service/management-zone/CDvehicle-service.json b/BMW-Dynatrace-config/CD_vehicle-service/management-zone/CDvehicle-service.json deleted file mode 100644 index b2a9367b..00000000 --- a/BMW-Dynatrace-config/CD_vehicle-service/management-zone/CDvehicle-service.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "dimensionalRules": [], - "name": "{{.name}}", - "rules": [ - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "{{.tag}}" - } - }, - "key": { - "attribute": "SERVICE_TAGS" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "HealthResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PingResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PrometheusResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - } - ], - "enabled": true, - "propagationTypes": [ - "SERVICE_TO_PROCESS_GROUP_LIKE", - "SERVICE_TO_HOST_LIKE" - ], - "type": "SERVICE" - }, - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "{{.tag}}" - } - }, - "key": { - "attribute": "PROCESS_GROUP_TAGS" - } - } - ], - "enabled": true, - "propagationTypes": [ - "PROCESS_GROUP_TO_HOST" - ], - "type": "PROCESS_GROUP" - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service/management-zone/README.md b/BMW-Dynatrace-config/CD_vehicle-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_vehicle-service/management-zone/default.json b/BMW-Dynatrace-config/CD_vehicle-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_vehicle-service/management-zone/management-zone.yaml index ca9455e6..6225bcf4 100644 --- a/BMW-Dynatrace-config/CD_vehicle-service/management-zone/management-zone.yaml +++ b/BMW-Dynatrace-config/CD_vehicle-service/management-zone/management-zone.yaml @@ -1,20 +1,6 @@ -CDvehicle-service.CN-PreProd: -- name: CD_vehicle-service -- tag: vehicle-service -CDvehicle-service.CN-Prod: -- name: CD_vehicle-service -- tag: vehicle-service -CDvehicle-service.EMEA-PreProd: -- name: CD_vehicle-service -- tag: vehicle-service -CDvehicle-service.EMEA-Prod: -- name: CD_vehicle-service -- tag: vehicle-service -CDvehicle-service.NA-PreProd: -- name: CD_vehicle-service -- tag: vehicle-service -CDvehicle-service.NA-Prod: -- name: CD_vehicle-service -- tag: vehicle-service config: -- CDvehicle-service: CDvehicle-service.json +- CDvehicle-service: default.json + +CDvehicle-service: +- name: CD_vehicle-service +- tag: vehicle-service diff --git a/BMW-Dynatrace-config/CD_vehicle-service/notification/README.md b/BMW-Dynatrace-config/CD_vehicle-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service/notification/email.json b/BMW-Dynatrace-config/CD_vehicle-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_vehicle-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_vehicle-service/notification/notification.yaml new file mode 100644 index 00000000..347508d6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDvehicle-service-PROD: msTeams.json +- CDvehicle-service-E2E: msTeams.json +- CDvehicle-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-service-PROD: +- name: CD_vehicle-service PROD +- alertingProfile: CD_vehicle-service/alerting-profile/CDvehicle-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-service-PROD.EMEA-Prod: +- name: CD_vehicle-service PROD +- alertingProfile: CD_vehicle-service/alerting-profile/CDvehicle-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-service-PROD.NA-Prod: +- name: CD_vehicle-service PROD +- alertingProfile: CD_vehicle-service/alerting-profile/CDvehicle-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-service-PROD.CN-Prod: +- name: CD_vehicle-service PROD +- alertingProfile: CD_vehicle-service/alerting-profile/CDvehicle-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-service-E2E: +- name: CD_vehicle-service E2E +- alertingProfile: CD_vehicle-service/alerting-profile/CDvehicle-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-service-E2E.EMEA-Prod: +- name: CD_vehicle-service E2E +- alertingProfile: CD_vehicle-service/alerting-profile/CDvehicle-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-service-E2E.NA-Prod: +- name: CD_vehicle-service E2E +- alertingProfile: CD_vehicle-service/alerting-profile/CDvehicle-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-service-E2E.CN-Prod: +- name: CD_vehicle-service E2E +- alertingProfile: CD_vehicle-service/alerting-profile/CDvehicle-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-service-INT: +- name: CD_vehicle-service INT +- alertingProfile: CD_vehicle-service/alerting-profile/CDvehicle-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-service-INT.EMEA-PreProd: +- name: CD_vehicle-service INT +- alertingProfile: CD_vehicle-service/alerting-profile/CDvehicle-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-service-INT.NA-PreProd: +- name: CD_vehicle-service INT +- alertingProfile: CD_vehicle-service/alerting-profile/CDvehicle-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-service-INT.CN-PreProd: +- name: CD_vehicle-service INT +- alertingProfile: CD_vehicle-service/alerting-profile/CDvehicle-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_vehicle-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_vehicle-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_vehicle-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..81f92fe5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- vehicle-service: default.json + +vehicle-service: +- name: CD_vehicle-service - +- mzName: CD_vehicle-service/management-zone/CDvehicle-service.name +- mzId: CD_vehicle-service/management-zone/CDvehicle-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/alerting-profile/alerting-profile.yaml index acc7aca5..7154a07d 100644 --- a/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/alerting-profile/alerting-profile.yaml +++ b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/alerting-profile/alerting-profile.yaml @@ -1,6 +1,88 @@ -CDvehicle-shadow-event-processor: -- name: CD_vehicle-shadow-event-processor/management-zone/CDvehicle-shadow-event-processor.name +config: +- CDvehicle-shadow-event-processor-PROD: default.json +- CDvehicle-shadow-event-processor-E2E: default.json +- CDvehicle-shadow-event-processor-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-shadow-event-processor-PROD: +- name: CD_vehicle-shadow-event-processor PROD - tag: vehicle-shadow-event-processor - mzId: CD_vehicle-shadow-event-processor/management-zone/CDvehicle-shadow-event-processor.id -config: -- CDvehicle-shadow-event-processor: vehicle-shadow-event-processor.json +- env: PROD +- skipDeployment: "true" +#Configuration +CDvehicle-shadow-event-processor-PROD.EMEA-Prod: +- name: CD_vehicle-shadow-event-processor PROD +- tag: vehicle-shadow-event-processor +- mzId: CD_vehicle-shadow-event-processor/management-zone/CDvehicle-shadow-event-processor.id +- env: PROD +- skipDeployment: "false" +CDvehicle-shadow-event-processor-PROD.NA-Prod: +- name: CD_vehicle-shadow-event-processor PROD +- tag: vehicle-shadow-event-processor +- mzId: CD_vehicle-shadow-event-processor/management-zone/CDvehicle-shadow-event-processor.id +- env: PROD +- skipDeployment: "false" +CDvehicle-shadow-event-processor-PROD.CN-Prod: +- name: CD_vehicle-shadow-event-processor PROD +- tag: vehicle-shadow-event-processor +- mzId: CD_vehicle-shadow-event-processor/management-zone/CDvehicle-shadow-event-processor.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-shadow-event-processor-E2E: +- name: CD_vehicle-shadow-event-processor E2E +- tag: vehicle-shadow-event-processor +- mzId: CD_vehicle-shadow-event-processor/management-zone/CDvehicle-shadow-event-processor.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDvehicle-shadow-event-processor-E2E.EMEA-Prod: +- name: CD_vehicle-shadow-event-processor E2E +- tag: vehicle-shadow-event-processor +- mzId: CD_vehicle-shadow-event-processor/management-zone/CDvehicle-shadow-event-processor.id +- env: E2E +- skipDeployment: "false" +CDvehicle-shadow-event-processor-E2E.NA-Prod: +- name: CD_vehicle-shadow-event-processor E2E +- tag: vehicle-shadow-event-processor +- mzId: CD_vehicle-shadow-event-processor/management-zone/CDvehicle-shadow-event-processor.id +- env: E2E +- skipDeployment: "false" +CDvehicle-shadow-event-processor-E2E.CN-Prod: +- name: CD_vehicle-shadow-event-processor E2E +- tag: vehicle-shadow-event-processor +- mzId: CD_vehicle-shadow-event-processor/management-zone/CDvehicle-shadow-event-processor.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-shadow-event-processor-INT: +- name: CD_vehicle-shadow-event-processor INT +- tag: vehicle-shadow-event-processor +- mzId: CD_vehicle-shadow-event-processor/management-zone/CDvehicle-shadow-event-processor.id +- env: INT +- skipDeployment: "true" +#Configuration +CDvehicle-shadow-event-processor-INT.EMEA-PreProd: +- name: CD_vehicle-shadow-event-processor INT +- tag: vehicle-shadow-event-processor +- mzId: CD_vehicle-shadow-event-processor/management-zone/CDvehicle-shadow-event-processor.id +- env: INT +- skipDeployment: "false" +CDvehicle-shadow-event-processor-INT.NA-PreProd: +- name: CD_vehicle-shadow-event-processor INT +- tag: vehicle-shadow-event-processor +- mzId: CD_vehicle-shadow-event-processor/management-zone/CDvehicle-shadow-event-processor.id +- env: INT +- skipDeployment: "false" +CDvehicle-shadow-event-processor-INT.CN-PreProd: +- name: CD_vehicle-shadow-event-processor INT +- tag: vehicle-shadow-event-processor +- mzId: CD_vehicle-shadow-event-processor/management-zone/CDvehicle-shadow-event-processor.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/alerting-profile/default.json b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/alerting-profile/vehicle-shadow-event-processor.json b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/alerting-profile/vehicle-shadow-event-processor.json deleted file mode 100644 index d10ad44a..00000000 --- a/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/alerting-profile/vehicle-shadow-event-processor.json +++ /dev/null @@ -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}}" - } - ] - } - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/custom-service-java/README.md b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/dashboard/README.md b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/dashboard/dashboard.yaml new file mode 100644 index 00000000..23ff49ae --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDvehicle-shadow-event-processor-PROD-E2E: defaultPRODE2E.json +- CDvehicle-shadow-event-processor-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDvehicle-shadow-event-processor-PROD-E2E: +- name: CD_vehicle-shadow-event-processor PROD +- mzName: CD_vehicle-shadow-event-processor/management-zone/CDvehicle-shadow-event-processor.name +- mzId: CD_vehicle-shadow-event-processor/management-zone/CDvehicle-shadow-event-processor.id +- skipDeployment: "true" +#Configuration +CDvehicle-shadow-event-processor-PROD-E2E.EMEA-Prod: +- name: CD_vehicle-shadow-event-processor PROD +- mzName: CD_vehicle-shadow-event-processor/management-zone/CDvehicle-shadow-event-processor.name +- mzId: CD_vehicle-shadow-event-processor/management-zone/CDvehicle-shadow-event-processor.id +- tag: vehicle-shadow-event-processor +- skipDeployment: "false" +CDvehicle-shadow-event-processor-PROD-E2E.NA-Prod: +- name: CD_vehicle-shadow-event-processor PROD +- mzName: CD_vehicle-shadow-event-processor/management-zone/CDvehicle-shadow-event-processor.name +- mzId: CD_vehicle-shadow-event-processor/management-zone/CDvehicle-shadow-event-processor.id +- tag: vehicle-shadow-event-processor +- skipDeployment: "false" +CDvehicle-shadow-event-processor-PROD-E2E.CN-Prod: +- name: CD_vehicle-shadow-event-processor PROD +- mzName: CD_vehicle-shadow-event-processor/management-zone/CDvehicle-shadow-event-processor.name +- mzId: CD_vehicle-shadow-event-processor/management-zone/CDvehicle-shadow-event-processor.id +- tag: vehicle-shadow-event-processor +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDvehicle-shadow-event-processor-INT-TEST: +- name: CD_vehicle-shadow-event-processor INT-TEST +- mzName: CD_vehicle-shadow-event-processor/management-zone/CDvehicle-shadow-event-processor.name +- mzId: CD_vehicle-shadow-event-processor/management-zone/CDvehicle-shadow-event-processor.id +- tag: vehicle-shadow-event-processor +- skipDeployment: "true" +#Configuration +CDvehicle-shadow-event-processor-INT-TEST.EMEA-PreProd: +- name: CD_vehicle-shadow-event-processor INT-TEST +- mzName: CD_vehicle-shadow-event-processor/management-zone/CDvehicle-shadow-event-processor.name +- mzId: CD_vehicle-shadow-event-processor/management-zone/CDvehicle-shadow-event-processor.id +- tag: vehicle-shadow-event-processor +- skipDeployment: "false" +CDvehicle-shadow-event-processor-INT-TEST.NA-PreProd: +- name: CD_vehicle-shadow-event-processor INT-TEST +- mzName: CD_vehicle-shadow-event-processor/management-zone/CDvehicle-shadow-event-processor.name +- mzId: CD_vehicle-shadow-event-processor/management-zone/CDvehicle-shadow-event-processor.id +- env: INT +- skipDeployment: "false" +CDvehicle-shadow-event-processor-INT-TEST.CN-PreProd: +- name: CD_vehicle-shadow-event-processor INT-TEST +- mzName: CD_vehicle-shadow-event-processor/management-zone/CDvehicle-shadow-event-processor.name +- mzId: CD_vehicle-shadow-event-processor/management-zone/CDvehicle-shadow-event-processor.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/management-zone/CDvehicle-shadow-event-processor.json b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/management-zone/CDvehicle-shadow-event-processor.json deleted file mode 100644 index b2a9367b..00000000 --- a/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/management-zone/CDvehicle-shadow-event-processor.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "dimensionalRules": [], - "name": "{{.name}}", - "rules": [ - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "{{.tag}}" - } - }, - "key": { - "attribute": "SERVICE_TAGS" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "HealthResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PingResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PrometheusResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - } - ], - "enabled": true, - "propagationTypes": [ - "SERVICE_TO_PROCESS_GROUP_LIKE", - "SERVICE_TO_HOST_LIKE" - ], - "type": "SERVICE" - }, - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "{{.tag}}" - } - }, - "key": { - "attribute": "PROCESS_GROUP_TAGS" - } - } - ], - "enabled": true, - "propagationTypes": [ - "PROCESS_GROUP_TO_HOST" - ], - "type": "PROCESS_GROUP" - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/management-zone/README.md b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/management-zone/default.json b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/management-zone/management-zone.yaml index 32229bda..57622120 100644 --- a/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/management-zone/management-zone.yaml +++ b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/management-zone/management-zone.yaml @@ -1,20 +1,6 @@ -CDvehicle-shadow-event-processor.CN-PreProd: -- name: CD_vehicle-shadow-event-processor -- tag: vehicle-shadow-event-processor -CDvehicle-shadow-event-processor.CN-Prod: -- name: CD_vehicle-shadow-event-processor -- tag: vehicle-shadow-event-processor -CDvehicle-shadow-event-processor.EMEA-PreProd: -- name: CD_vehicle-shadow-event-processor -- tag: vehicle-shadow-event-processor -CDvehicle-shadow-event-processor.EMEA-Prod: -- name: CD_vehicle-shadow-event-processor -- tag: vehicle-shadow-event-processor -CDvehicle-shadow-event-processor.NA-PreProd: -- name: CD_vehicle-shadow-event-processor -- tag: vehicle-shadow-event-processor -CDvehicle-shadow-event-processor.NA-Prod: -- name: CD_vehicle-shadow-event-processor -- tag: vehicle-shadow-event-processor config: -- CDvehicle-shadow-event-processor: CDvehicle-shadow-event-processor.json +- CDvehicle-shadow-event-processor: default.json + +CDvehicle-shadow-event-processor: +- name: CD_vehicle-shadow-event-processor +- tag: vehicle-shadow-event-processor diff --git a/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/notification/README.md b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/notification/email.json b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/notification/msTeams.json b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/notification/notification.yaml b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/notification/notification.yaml new file mode 100644 index 00000000..7ee565d1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDvehicle-shadow-event-processor-PROD: msTeams.json +- CDvehicle-shadow-event-processor-E2E: msTeams.json +- CDvehicle-shadow-event-processor-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-shadow-event-processor-PROD: +- name: CD_vehicle-shadow-event-processor PROD +- alertingProfile: CD_vehicle-shadow-event-processor/alerting-profile/CDvehicle-shadow-event-processor-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-shadow-event-processor-PROD.EMEA-Prod: +- name: CD_vehicle-shadow-event-processor PROD +- alertingProfile: CD_vehicle-shadow-event-processor/alerting-profile/CDvehicle-shadow-event-processor-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-shadow-event-processor-PROD.NA-Prod: +- name: CD_vehicle-shadow-event-processor PROD +- alertingProfile: CD_vehicle-shadow-event-processor/alerting-profile/CDvehicle-shadow-event-processor-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-shadow-event-processor-PROD.CN-Prod: +- name: CD_vehicle-shadow-event-processor PROD +- alertingProfile: CD_vehicle-shadow-event-processor/alerting-profile/CDvehicle-shadow-event-processor-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-shadow-event-processor-E2E: +- name: CD_vehicle-shadow-event-processor E2E +- alertingProfile: CD_vehicle-shadow-event-processor/alerting-profile/CDvehicle-shadow-event-processor-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-shadow-event-processor-E2E.EMEA-Prod: +- name: CD_vehicle-shadow-event-processor E2E +- alertingProfile: CD_vehicle-shadow-event-processor/alerting-profile/CDvehicle-shadow-event-processor-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-shadow-event-processor-E2E.NA-Prod: +- name: CD_vehicle-shadow-event-processor E2E +- alertingProfile: CD_vehicle-shadow-event-processor/alerting-profile/CDvehicle-shadow-event-processor-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-shadow-event-processor-E2E.CN-Prod: +- name: CD_vehicle-shadow-event-processor E2E +- alertingProfile: CD_vehicle-shadow-event-processor/alerting-profile/CDvehicle-shadow-event-processor-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-shadow-event-processor-INT: +- name: CD_vehicle-shadow-event-processor INT +- alertingProfile: CD_vehicle-shadow-event-processor/alerting-profile/CDvehicle-shadow-event-processor-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-shadow-event-processor-INT.EMEA-PreProd: +- name: CD_vehicle-shadow-event-processor INT +- alertingProfile: CD_vehicle-shadow-event-processor/alerting-profile/CDvehicle-shadow-event-processor-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-shadow-event-processor-INT.NA-PreProd: +- name: CD_vehicle-shadow-event-processor INT +- alertingProfile: CD_vehicle-shadow-event-processor/alerting-profile/CDvehicle-shadow-event-processor-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-shadow-event-processor-INT.CN-PreProd: +- name: CD_vehicle-shadow-event-processor INT +- alertingProfile: CD_vehicle-shadow-event-processor/alerting-profile/CDvehicle-shadow-event-processor-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..9279989a --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- vehicle-shadow-event-processor: default.json + +vehicle-shadow-event-processor: +- name: CD_vehicle-shadow-event-processor - +- mzName: CD_vehicle-shadow-event-processor/management-zone/CDvehicle-shadow-event-processor.name +- mzId: CD_vehicle-shadow-event-processor/management-zone/CDvehicle-shadow-event-processor.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/alerting-profile/alerting-profile.yaml index 27dbf416..f29b63b0 100644 --- a/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/alerting-profile/alerting-profile.yaml +++ b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/alerting-profile/alerting-profile.yaml @@ -1,6 +1,88 @@ -CDvehicle-status-proxy-service: -- name: CD_vehicle-status-proxy-service/management-zone/CDvehicle-status-proxy-service.name +config: +- CDvehicle-status-proxy-service-PROD: default.json +- CDvehicle-status-proxy-service-E2E: default.json +- CDvehicle-status-proxy-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-status-proxy-service-PROD: +- name: CD_vehicle-status-proxy-service PROD - tag: vehicle-status-proxy-service - mzId: CD_vehicle-status-proxy-service/management-zone/CDvehicle-status-proxy-service.id -config: -- CDvehicle-status-proxy-service: vehicle-status-proxy-service.json +- env: PROD +- skipDeployment: "true" +#Configuration +CDvehicle-status-proxy-service-PROD.EMEA-Prod: +- name: CD_vehicle-status-proxy-service PROD +- tag: vehicle-status-proxy-service +- mzId: CD_vehicle-status-proxy-service/management-zone/CDvehicle-status-proxy-service.id +- env: PROD +- skipDeployment: "false" +CDvehicle-status-proxy-service-PROD.NA-Prod: +- name: CD_vehicle-status-proxy-service PROD +- tag: vehicle-status-proxy-service +- mzId: CD_vehicle-status-proxy-service/management-zone/CDvehicle-status-proxy-service.id +- env: PROD +- skipDeployment: "false" +CDvehicle-status-proxy-service-PROD.CN-Prod: +- name: CD_vehicle-status-proxy-service PROD +- tag: vehicle-status-proxy-service +- mzId: CD_vehicle-status-proxy-service/management-zone/CDvehicle-status-proxy-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-status-proxy-service-E2E: +- name: CD_vehicle-status-proxy-service E2E +- tag: vehicle-status-proxy-service +- mzId: CD_vehicle-status-proxy-service/management-zone/CDvehicle-status-proxy-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDvehicle-status-proxy-service-E2E.EMEA-Prod: +- name: CD_vehicle-status-proxy-service E2E +- tag: vehicle-status-proxy-service +- mzId: CD_vehicle-status-proxy-service/management-zone/CDvehicle-status-proxy-service.id +- env: E2E +- skipDeployment: "false" +CDvehicle-status-proxy-service-E2E.NA-Prod: +- name: CD_vehicle-status-proxy-service E2E +- tag: vehicle-status-proxy-service +- mzId: CD_vehicle-status-proxy-service/management-zone/CDvehicle-status-proxy-service.id +- env: E2E +- skipDeployment: "false" +CDvehicle-status-proxy-service-E2E.CN-Prod: +- name: CD_vehicle-status-proxy-service E2E +- tag: vehicle-status-proxy-service +- mzId: CD_vehicle-status-proxy-service/management-zone/CDvehicle-status-proxy-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-status-proxy-service-INT: +- name: CD_vehicle-status-proxy-service INT +- tag: vehicle-status-proxy-service +- mzId: CD_vehicle-status-proxy-service/management-zone/CDvehicle-status-proxy-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDvehicle-status-proxy-service-INT.EMEA-PreProd: +- name: CD_vehicle-status-proxy-service INT +- tag: vehicle-status-proxy-service +- mzId: CD_vehicle-status-proxy-service/management-zone/CDvehicle-status-proxy-service.id +- env: INT +- skipDeployment: "false" +CDvehicle-status-proxy-service-INT.NA-PreProd: +- name: CD_vehicle-status-proxy-service INT +- tag: vehicle-status-proxy-service +- mzId: CD_vehicle-status-proxy-service/management-zone/CDvehicle-status-proxy-service.id +- env: INT +- skipDeployment: "false" +CDvehicle-status-proxy-service-INT.CN-PreProd: +- name: CD_vehicle-status-proxy-service INT +- tag: vehicle-status-proxy-service +- mzId: CD_vehicle-status-proxy-service/management-zone/CDvehicle-status-proxy-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/alerting-profile/vehicle-status-proxy-service.json b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/alerting-profile/vehicle-status-proxy-service.json deleted file mode 100644 index d10ad44a..00000000 --- a/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/alerting-profile/vehicle-status-proxy-service.json +++ /dev/null @@ -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}}" - } - ] - } - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/dashboard/README.md b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..0618a67c --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDvehicle-status-proxy-service-PROD-E2E: defaultPRODE2E.json +- CDvehicle-status-proxy-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDvehicle-status-proxy-service-PROD-E2E: +- name: CD_vehicle-status-proxy-service PROD +- mzName: CD_vehicle-status-proxy-service/management-zone/CDvehicle-status-proxy-service.name +- mzId: CD_vehicle-status-proxy-service/management-zone/CDvehicle-status-proxy-service.id +- skipDeployment: "true" +#Configuration +CDvehicle-status-proxy-service-PROD-E2E.EMEA-Prod: +- name: CD_vehicle-status-proxy-service PROD +- mzName: CD_vehicle-status-proxy-service/management-zone/CDvehicle-status-proxy-service.name +- mzId: CD_vehicle-status-proxy-service/management-zone/CDvehicle-status-proxy-service.id +- tag: vehicle-status-proxy-service +- skipDeployment: "false" +CDvehicle-status-proxy-service-PROD-E2E.NA-Prod: +- name: CD_vehicle-status-proxy-service PROD +- mzName: CD_vehicle-status-proxy-service/management-zone/CDvehicle-status-proxy-service.name +- mzId: CD_vehicle-status-proxy-service/management-zone/CDvehicle-status-proxy-service.id +- tag: vehicle-status-proxy-service +- skipDeployment: "false" +CDvehicle-status-proxy-service-PROD-E2E.CN-Prod: +- name: CD_vehicle-status-proxy-service PROD +- mzName: CD_vehicle-status-proxy-service/management-zone/CDvehicle-status-proxy-service.name +- mzId: CD_vehicle-status-proxy-service/management-zone/CDvehicle-status-proxy-service.id +- tag: vehicle-status-proxy-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDvehicle-status-proxy-service-INT-TEST: +- name: CD_vehicle-status-proxy-service INT-TEST +- mzName: CD_vehicle-status-proxy-service/management-zone/CDvehicle-status-proxy-service.name +- mzId: CD_vehicle-status-proxy-service/management-zone/CDvehicle-status-proxy-service.id +- tag: vehicle-status-proxy-service +- skipDeployment: "true" +#Configuration +CDvehicle-status-proxy-service-INT-TEST.EMEA-PreProd: +- name: CD_vehicle-status-proxy-service INT-TEST +- mzName: CD_vehicle-status-proxy-service/management-zone/CDvehicle-status-proxy-service.name +- mzId: CD_vehicle-status-proxy-service/management-zone/CDvehicle-status-proxy-service.id +- tag: vehicle-status-proxy-service +- skipDeployment: "false" +CDvehicle-status-proxy-service-INT-TEST.NA-PreProd: +- name: CD_vehicle-status-proxy-service INT-TEST +- mzName: CD_vehicle-status-proxy-service/management-zone/CDvehicle-status-proxy-service.name +- mzId: CD_vehicle-status-proxy-service/management-zone/CDvehicle-status-proxy-service.id +- env: INT +- skipDeployment: "false" +CDvehicle-status-proxy-service-INT-TEST.CN-PreProd: +- name: CD_vehicle-status-proxy-service INT-TEST +- mzName: CD_vehicle-status-proxy-service/management-zone/CDvehicle-status-proxy-service.name +- mzId: CD_vehicle-status-proxy-service/management-zone/CDvehicle-status-proxy-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/management-zone/CDvehicle-status-proxy-service.json b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/management-zone/CDvehicle-status-proxy-service.json deleted file mode 100644 index b2a9367b..00000000 --- a/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/management-zone/CDvehicle-status-proxy-service.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "dimensionalRules": [], - "name": "{{.name}}", - "rules": [ - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "{{.tag}}" - } - }, - "key": { - "attribute": "SERVICE_TAGS" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "HealthResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PingResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PrometheusResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - } - ], - "enabled": true, - "propagationTypes": [ - "SERVICE_TO_PROCESS_GROUP_LIKE", - "SERVICE_TO_HOST_LIKE" - ], - "type": "SERVICE" - }, - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "{{.tag}}" - } - }, - "key": { - "attribute": "PROCESS_GROUP_TAGS" - } - } - ], - "enabled": true, - "propagationTypes": [ - "PROCESS_GROUP_TO_HOST" - ], - "type": "PROCESS_GROUP" - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/management-zone/README.md b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/management-zone/default.json b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/management-zone/management-zone.yaml index 83c95604..0ba42c2f 100644 --- a/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/management-zone/management-zone.yaml +++ b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/management-zone/management-zone.yaml @@ -1,20 +1,6 @@ -CDvehicle-status-proxy-service.CN-PreProd: -- name: CD_vehicle-status-proxy-service -- tag: vehicle-status-proxy-service -CDvehicle-status-proxy-service.CN-Prod: -- name: CD_vehicle-status-proxy-service -- tag: vehicle-status-proxy-service -CDvehicle-status-proxy-service.EMEA-PreProd: -- name: CD_vehicle-status-proxy-service -- tag: vehicle-status-proxy-service -CDvehicle-status-proxy-service.EMEA-Prod: -- name: CD_vehicle-status-proxy-service -- tag: vehicle-status-proxy-service -CDvehicle-status-proxy-service.NA-PreProd: -- name: CD_vehicle-status-proxy-service -- tag: vehicle-status-proxy-service -CDvehicle-status-proxy-service.NA-Prod: -- name: CD_vehicle-status-proxy-service -- tag: vehicle-status-proxy-service config: -- CDvehicle-status-proxy-service: CDvehicle-status-proxy-service.json +- CDvehicle-status-proxy-service: default.json + +CDvehicle-status-proxy-service: +- name: CD_vehicle-status-proxy-service +- tag: vehicle-status-proxy-service diff --git a/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/notification/README.md b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/notification/email.json b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/notification/notification.yaml new file mode 100644 index 00000000..5d7334a2 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDvehicle-status-proxy-service-PROD: msTeams.json +- CDvehicle-status-proxy-service-E2E: msTeams.json +- CDvehicle-status-proxy-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-status-proxy-service-PROD: +- name: CD_vehicle-status-proxy-service PROD +- alertingProfile: CD_vehicle-status-proxy-service/alerting-profile/CDvehicle-status-proxy-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-status-proxy-service-PROD.EMEA-Prod: +- name: CD_vehicle-status-proxy-service PROD +- alertingProfile: CD_vehicle-status-proxy-service/alerting-profile/CDvehicle-status-proxy-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-status-proxy-service-PROD.NA-Prod: +- name: CD_vehicle-status-proxy-service PROD +- alertingProfile: CD_vehicle-status-proxy-service/alerting-profile/CDvehicle-status-proxy-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-status-proxy-service-PROD.CN-Prod: +- name: CD_vehicle-status-proxy-service PROD +- alertingProfile: CD_vehicle-status-proxy-service/alerting-profile/CDvehicle-status-proxy-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-status-proxy-service-E2E: +- name: CD_vehicle-status-proxy-service E2E +- alertingProfile: CD_vehicle-status-proxy-service/alerting-profile/CDvehicle-status-proxy-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-status-proxy-service-E2E.EMEA-Prod: +- name: CD_vehicle-status-proxy-service E2E +- alertingProfile: CD_vehicle-status-proxy-service/alerting-profile/CDvehicle-status-proxy-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-status-proxy-service-E2E.NA-Prod: +- name: CD_vehicle-status-proxy-service E2E +- alertingProfile: CD_vehicle-status-proxy-service/alerting-profile/CDvehicle-status-proxy-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-status-proxy-service-E2E.CN-Prod: +- name: CD_vehicle-status-proxy-service E2E +- alertingProfile: CD_vehicle-status-proxy-service/alerting-profile/CDvehicle-status-proxy-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-status-proxy-service-INT: +- name: CD_vehicle-status-proxy-service INT +- alertingProfile: CD_vehicle-status-proxy-service/alerting-profile/CDvehicle-status-proxy-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-status-proxy-service-INT.EMEA-PreProd: +- name: CD_vehicle-status-proxy-service INT +- alertingProfile: CD_vehicle-status-proxy-service/alerting-profile/CDvehicle-status-proxy-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-status-proxy-service-INT.NA-PreProd: +- name: CD_vehicle-status-proxy-service INT +- alertingProfile: CD_vehicle-status-proxy-service/alerting-profile/CDvehicle-status-proxy-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-status-proxy-service-INT.CN-PreProd: +- name: CD_vehicle-status-proxy-service INT +- alertingProfile: CD_vehicle-status-proxy-service/alerting-profile/CDvehicle-status-proxy-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..81088255 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- vehicle-status-proxy-service: default.json + +vehicle-status-proxy-service: +- name: CD_vehicle-status-proxy-service - +- mzName: CD_vehicle-status-proxy-service/management-zone/CDvehicle-status-proxy-service.name +- mzId: CD_vehicle-status-proxy-service/management-zone/CDvehicle-status-proxy-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/alerting-profile/alerting-profile.yaml index fbdeb7f2..f1e16643 100644 --- a/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/alerting-profile/alerting-profile.yaml +++ b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/alerting-profile/alerting-profile.yaml @@ -1,6 +1,88 @@ -CDvehicle-user-relationship-service: -- name: CD_vehicle-user-relationship-service/management-zone/CDvehicle-user-relationship-service.name +config: +- CDvehicle-user-relationship-service-PROD: default.json +- CDvehicle-user-relationship-service-E2E: default.json +- CDvehicle-user-relationship-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-user-relationship-service-PROD: +- name: CD_vehicle-user-relationship-service PROD - tag: vehicle-user-relationship-service - mzId: CD_vehicle-user-relationship-service/management-zone/CDvehicle-user-relationship-service.id -config: -- CDvehicle-user-relationship-service: vehicle-user-relationship-service.json +- env: PROD +- skipDeployment: "true" +#Configuration +CDvehicle-user-relationship-service-PROD.EMEA-Prod: +- name: CD_vehicle-user-relationship-service PROD +- tag: vehicle-user-relationship-service +- mzId: CD_vehicle-user-relationship-service/management-zone/CDvehicle-user-relationship-service.id +- env: PROD +- skipDeployment: "false" +CDvehicle-user-relationship-service-PROD.NA-Prod: +- name: CD_vehicle-user-relationship-service PROD +- tag: vehicle-user-relationship-service +- mzId: CD_vehicle-user-relationship-service/management-zone/CDvehicle-user-relationship-service.id +- env: PROD +- skipDeployment: "false" +CDvehicle-user-relationship-service-PROD.CN-Prod: +- name: CD_vehicle-user-relationship-service PROD +- tag: vehicle-user-relationship-service +- mzId: CD_vehicle-user-relationship-service/management-zone/CDvehicle-user-relationship-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-user-relationship-service-E2E: +- name: CD_vehicle-user-relationship-service E2E +- tag: vehicle-user-relationship-service +- mzId: CD_vehicle-user-relationship-service/management-zone/CDvehicle-user-relationship-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDvehicle-user-relationship-service-E2E.EMEA-Prod: +- name: CD_vehicle-user-relationship-service E2E +- tag: vehicle-user-relationship-service +- mzId: CD_vehicle-user-relationship-service/management-zone/CDvehicle-user-relationship-service.id +- env: E2E +- skipDeployment: "false" +CDvehicle-user-relationship-service-E2E.NA-Prod: +- name: CD_vehicle-user-relationship-service E2E +- tag: vehicle-user-relationship-service +- mzId: CD_vehicle-user-relationship-service/management-zone/CDvehicle-user-relationship-service.id +- env: E2E +- skipDeployment: "false" +CDvehicle-user-relationship-service-E2E.CN-Prod: +- name: CD_vehicle-user-relationship-service E2E +- tag: vehicle-user-relationship-service +- mzId: CD_vehicle-user-relationship-service/management-zone/CDvehicle-user-relationship-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-user-relationship-service-INT: +- name: CD_vehicle-user-relationship-service INT +- tag: vehicle-user-relationship-service +- mzId: CD_vehicle-user-relationship-service/management-zone/CDvehicle-user-relationship-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDvehicle-user-relationship-service-INT.EMEA-PreProd: +- name: CD_vehicle-user-relationship-service INT +- tag: vehicle-user-relationship-service +- mzId: CD_vehicle-user-relationship-service/management-zone/CDvehicle-user-relationship-service.id +- env: INT +- skipDeployment: "false" +CDvehicle-user-relationship-service-INT.NA-PreProd: +- name: CD_vehicle-user-relationship-service INT +- tag: vehicle-user-relationship-service +- mzId: CD_vehicle-user-relationship-service/management-zone/CDvehicle-user-relationship-service.id +- env: INT +- skipDeployment: "false" +CDvehicle-user-relationship-service-INT.CN-PreProd: +- name: CD_vehicle-user-relationship-service INT +- tag: vehicle-user-relationship-service +- mzId: CD_vehicle-user-relationship-service/management-zone/CDvehicle-user-relationship-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/alerting-profile/vehicle-user-relationship-service.json b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/alerting-profile/vehicle-user-relationship-service.json deleted file mode 100644 index d10ad44a..00000000 --- a/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/alerting-profile/vehicle-user-relationship-service.json +++ /dev/null @@ -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}}" - } - ] - } - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/dashboard/README.md b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..0cf9906c --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDvehicle-user-relationship-service-PROD-E2E: defaultPRODE2E.json +- CDvehicle-user-relationship-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDvehicle-user-relationship-service-PROD-E2E: +- name: CD_vehicle-user-relationship-service PROD +- mzName: CD_vehicle-user-relationship-service/management-zone/CDvehicle-user-relationship-service.name +- mzId: CD_vehicle-user-relationship-service/management-zone/CDvehicle-user-relationship-service.id +- skipDeployment: "true" +#Configuration +CDvehicle-user-relationship-service-PROD-E2E.EMEA-Prod: +- name: CD_vehicle-user-relationship-service PROD +- mzName: CD_vehicle-user-relationship-service/management-zone/CDvehicle-user-relationship-service.name +- mzId: CD_vehicle-user-relationship-service/management-zone/CDvehicle-user-relationship-service.id +- tag: vehicle-user-relationship-service +- skipDeployment: "false" +CDvehicle-user-relationship-service-PROD-E2E.NA-Prod: +- name: CD_vehicle-user-relationship-service PROD +- mzName: CD_vehicle-user-relationship-service/management-zone/CDvehicle-user-relationship-service.name +- mzId: CD_vehicle-user-relationship-service/management-zone/CDvehicle-user-relationship-service.id +- tag: vehicle-user-relationship-service +- skipDeployment: "false" +CDvehicle-user-relationship-service-PROD-E2E.CN-Prod: +- name: CD_vehicle-user-relationship-service PROD +- mzName: CD_vehicle-user-relationship-service/management-zone/CDvehicle-user-relationship-service.name +- mzId: CD_vehicle-user-relationship-service/management-zone/CDvehicle-user-relationship-service.id +- tag: vehicle-user-relationship-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDvehicle-user-relationship-service-INT-TEST: +- name: CD_vehicle-user-relationship-service INT-TEST +- mzName: CD_vehicle-user-relationship-service/management-zone/CDvehicle-user-relationship-service.name +- mzId: CD_vehicle-user-relationship-service/management-zone/CDvehicle-user-relationship-service.id +- tag: vehicle-user-relationship-service +- skipDeployment: "true" +#Configuration +CDvehicle-user-relationship-service-INT-TEST.EMEA-PreProd: +- name: CD_vehicle-user-relationship-service INT-TEST +- mzName: CD_vehicle-user-relationship-service/management-zone/CDvehicle-user-relationship-service.name +- mzId: CD_vehicle-user-relationship-service/management-zone/CDvehicle-user-relationship-service.id +- tag: vehicle-user-relationship-service +- skipDeployment: "false" +CDvehicle-user-relationship-service-INT-TEST.NA-PreProd: +- name: CD_vehicle-user-relationship-service INT-TEST +- mzName: CD_vehicle-user-relationship-service/management-zone/CDvehicle-user-relationship-service.name +- mzId: CD_vehicle-user-relationship-service/management-zone/CDvehicle-user-relationship-service.id +- env: INT +- skipDeployment: "false" +CDvehicle-user-relationship-service-INT-TEST.CN-PreProd: +- name: CD_vehicle-user-relationship-service INT-TEST +- mzName: CD_vehicle-user-relationship-service/management-zone/CDvehicle-user-relationship-service.name +- mzId: CD_vehicle-user-relationship-service/management-zone/CDvehicle-user-relationship-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/management-zone/CDvehicle-user-relationship-service.json b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/management-zone/CDvehicle-user-relationship-service.json deleted file mode 100644 index b2a9367b..00000000 --- a/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/management-zone/CDvehicle-user-relationship-service.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "dimensionalRules": [], - "name": "{{.name}}", - "rules": [ - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "{{.tag}}" - } - }, - "key": { - "attribute": "SERVICE_TAGS" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "HealthResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PingResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "PrometheusResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - } - ], - "enabled": true, - "propagationTypes": [ - "SERVICE_TO_PROCESS_GROUP_LIKE", - "SERVICE_TO_HOST_LIKE" - ], - "type": "SERVICE" - }, - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "{{.tag}}" - } - }, - "key": { - "attribute": "PROCESS_GROUP_TAGS" - } - } - ], - "enabled": true, - "propagationTypes": [ - "PROCESS_GROUP_TO_HOST" - ], - "type": "PROCESS_GROUP" - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/management-zone/README.md b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/management-zone/default.json b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/management-zone/management-zone.yaml index 1332dced..7cd71dce 100644 --- a/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/management-zone/management-zone.yaml +++ b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/management-zone/management-zone.yaml @@ -1,20 +1,6 @@ -CDvehicle-user-relationship-service.CN-PreProd: -- name: CD_vehicle-user-relationship-service -- tag: vehicle-user-relationship-service -CDvehicle-user-relationship-service.CN-Prod: -- name: CD_vehicle-user-relationship-service -- tag: vehicle-user-relationship-service -CDvehicle-user-relationship-service.EMEA-PreProd: -- name: CD_vehicle-user-relationship-service -- tag: vehicle-user-relationship-service -CDvehicle-user-relationship-service.EMEA-Prod: -- name: CD_vehicle-user-relationship-service -- tag: vehicle-user-relationship-service -CDvehicle-user-relationship-service.NA-PreProd: -- name: CD_vehicle-user-relationship-service -- tag: vehicle-user-relationship-service -CDvehicle-user-relationship-service.NA-Prod: -- name: CD_vehicle-user-relationship-service -- tag: vehicle-user-relationship-service config: -- CDvehicle-user-relationship-service: CDvehicle-user-relationship-service.json +- CDvehicle-user-relationship-service: default.json + +CDvehicle-user-relationship-service: +- name: CD_vehicle-user-relationship-service +- tag: vehicle-user-relationship-service diff --git a/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/notification/README.md b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/notification/email.json b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/notification/notification.yaml new file mode 100644 index 00000000..1e7a8925 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDvehicle-user-relationship-service-PROD: msTeams.json +- CDvehicle-user-relationship-service-E2E: msTeams.json +- CDvehicle-user-relationship-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-user-relationship-service-PROD: +- name: CD_vehicle-user-relationship-service PROD +- alertingProfile: CD_vehicle-user-relationship-service/alerting-profile/CDvehicle-user-relationship-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-user-relationship-service-PROD.EMEA-Prod: +- name: CD_vehicle-user-relationship-service PROD +- alertingProfile: CD_vehicle-user-relationship-service/alerting-profile/CDvehicle-user-relationship-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-user-relationship-service-PROD.NA-Prod: +- name: CD_vehicle-user-relationship-service PROD +- alertingProfile: CD_vehicle-user-relationship-service/alerting-profile/CDvehicle-user-relationship-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-user-relationship-service-PROD.CN-Prod: +- name: CD_vehicle-user-relationship-service PROD +- alertingProfile: CD_vehicle-user-relationship-service/alerting-profile/CDvehicle-user-relationship-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-user-relationship-service-E2E: +- name: CD_vehicle-user-relationship-service E2E +- alertingProfile: CD_vehicle-user-relationship-service/alerting-profile/CDvehicle-user-relationship-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-user-relationship-service-E2E.EMEA-Prod: +- name: CD_vehicle-user-relationship-service E2E +- alertingProfile: CD_vehicle-user-relationship-service/alerting-profile/CDvehicle-user-relationship-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-user-relationship-service-E2E.NA-Prod: +- name: CD_vehicle-user-relationship-service E2E +- alertingProfile: CD_vehicle-user-relationship-service/alerting-profile/CDvehicle-user-relationship-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-user-relationship-service-E2E.CN-Prod: +- name: CD_vehicle-user-relationship-service E2E +- alertingProfile: CD_vehicle-user-relationship-service/alerting-profile/CDvehicle-user-relationship-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvehicle-user-relationship-service-INT: +- name: CD_vehicle-user-relationship-service INT +- alertingProfile: CD_vehicle-user-relationship-service/alerting-profile/CDvehicle-user-relationship-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvehicle-user-relationship-service-INT.EMEA-PreProd: +- name: CD_vehicle-user-relationship-service INT +- alertingProfile: CD_vehicle-user-relationship-service/alerting-profile/CDvehicle-user-relationship-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-user-relationship-service-INT.NA-PreProd: +- name: CD_vehicle-user-relationship-service INT +- alertingProfile: CD_vehicle-user-relationship-service/alerting-profile/CDvehicle-user-relationship-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvehicle-user-relationship-service-INT.CN-PreProd: +- name: CD_vehicle-user-relationship-service INT +- alertingProfile: CD_vehicle-user-relationship-service/alerting-profile/CDvehicle-user-relationship-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..94ffcd22 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- vehicle-user-relationship-service: default.json + +vehicle-user-relationship-service: +- name: CD_vehicle-user-relationship-service - +- mzName: CD_vehicle-user-relationship-service/management-zone/CDvehicle-user-relationship-service.name +- mzId: CD_vehicle-user-relationship-service/management-zone/CDvehicle-user-relationship-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vin-list-generator-service/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_vin-list-generator-service/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..60281d69 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vin-list-generator-service/alerting-profile/alerting-profile.yaml @@ -0,0 +1,88 @@ +config: +- CDvin-list-generator-service-PROD: default.json +- CDvin-list-generator-service-E2E: default.json +- CDvin-list-generator-service-INT: default.json + +#Prod dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvin-list-generator-service-PROD: +- name: CD_vin-list-generator-service PROD +- tag: vin-list-generator-service +- mzId: CD_vin-list-generator-service/management-zone/CDvin-list-generator-service.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDvin-list-generator-service-PROD.EMEA-Prod: +- name: CD_vin-list-generator-service PROD +- tag: vin-list-generator-service +- mzId: CD_vin-list-generator-service/management-zone/CDvin-list-generator-service.id +- env: PROD +- skipDeployment: "false" +CDvin-list-generator-service-PROD.NA-Prod: +- name: CD_vin-list-generator-service PROD +- tag: vin-list-generator-service +- mzId: CD_vin-list-generator-service/management-zone/CDvin-list-generator-service.id +- env: PROD +- skipDeployment: "false" +CDvin-list-generator-service-PROD.CN-Prod: +- name: CD_vin-list-generator-service PROD +- tag: vin-list-generator-service +- mzId: CD_vin-list-generator-service/management-zone/CDvin-list-generator-service.id +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvin-list-generator-service-E2E: +- name: CD_vin-list-generator-service E2E +- tag: vin-list-generator-service +- mzId: CD_vin-list-generator-service/management-zone/CDvin-list-generator-service.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDvin-list-generator-service-E2E.EMEA-Prod: +- name: CD_vin-list-generator-service E2E +- tag: vin-list-generator-service +- mzId: CD_vin-list-generator-service/management-zone/CDvin-list-generator-service.id +- env: E2E +- skipDeployment: "false" +CDvin-list-generator-service-E2E.NA-Prod: +- name: CD_vin-list-generator-service E2E +- tag: vin-list-generator-service +- mzId: CD_vin-list-generator-service/management-zone/CDvin-list-generator-service.id +- env: E2E +- skipDeployment: "false" +CDvin-list-generator-service-E2E.CN-Prod: +- name: CD_vin-list-generator-service E2E +- tag: vin-list-generator-service +- mzId: CD_vin-list-generator-service/management-zone/CDvin-list-generator-service.id +- env: E2E +- skipDeployment: "false" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDvin-list-generator-service-INT: +- name: CD_vin-list-generator-service INT +- tag: vin-list-generator-service +- mzId: CD_vin-list-generator-service/management-zone/CDvin-list-generator-service.id +- env: INT +- skipDeployment: "true" +#Configuration +CDvin-list-generator-service-INT.EMEA-PreProd: +- name: CD_vin-list-generator-service INT +- tag: vin-list-generator-service +- mzId: CD_vin-list-generator-service/management-zone/CDvin-list-generator-service.id +- env: INT +- skipDeployment: "false" +CDvin-list-generator-service-INT.NA-PreProd: +- name: CD_vin-list-generator-service INT +- tag: vin-list-generator-service +- mzId: CD_vin-list-generator-service/management-zone/CDvin-list-generator-service.id +- env: INT +- skipDeployment: "false" +CDvin-list-generator-service-INT.CN-PreProd: +- name: CD_vin-list-generator-service INT +- tag: vin-list-generator-service +- mzId: CD_vin-list-generator-service/management-zone/CDvin-list-generator-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vin-list-generator-service/alerting-profile/default.json b/BMW-Dynatrace-config/CD_vin-list-generator-service/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vin-list-generator-service/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vin-list-generator-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_vin-list-generator-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_vin-list-generator-service/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vin-list-generator-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_vin-list-generator-service/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vin-list-generator-service/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vin-list-generator-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_vin-list-generator-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vin-list-generator-service/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vin-list-generator-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_vin-list-generator-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vin-list-generator-service/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vin-list-generator-service/dashboard/README.md b/BMW-Dynatrace-config/CD_vin-list-generator-service/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_vin-list-generator-service/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vin-list-generator-service/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_vin-list-generator-service/dashboard/dashboard.yaml new file mode 100644 index 00000000..31728d14 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vin-list-generator-service/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDvin-list-generator-service-PROD-E2E: defaultPRODE2E.json +- CDvin-list-generator-service-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDvin-list-generator-service-PROD-E2E: +- name: CD_vin-list-generator-service PROD +- mzName: CD_vin-list-generator-service/management-zone/CDvin-list-generator-service.name +- mzId: CD_vin-list-generator-service/management-zone/CDvin-list-generator-service.id +- skipDeployment: "true" +#Configuration +CDvin-list-generator-service-PROD-E2E.EMEA-Prod: +- name: CD_vin-list-generator-service PROD +- mzName: CD_vin-list-generator-service/management-zone/CDvin-list-generator-service.name +- mzId: CD_vin-list-generator-service/management-zone/CDvin-list-generator-service.id +- tag: vin-list-generator-service +- skipDeployment: "false" +CDvin-list-generator-service-PROD-E2E.NA-Prod: +- name: CD_vin-list-generator-service PROD +- mzName: CD_vin-list-generator-service/management-zone/CDvin-list-generator-service.name +- mzId: CD_vin-list-generator-service/management-zone/CDvin-list-generator-service.id +- tag: vin-list-generator-service +- skipDeployment: "false" +CDvin-list-generator-service-PROD-E2E.CN-Prod: +- name: CD_vin-list-generator-service PROD +- mzName: CD_vin-list-generator-service/management-zone/CDvin-list-generator-service.name +- mzId: CD_vin-list-generator-service/management-zone/CDvin-list-generator-service.id +- tag: vin-list-generator-service +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDvin-list-generator-service-INT-TEST: +- name: CD_vin-list-generator-service INT-TEST +- mzName: CD_vin-list-generator-service/management-zone/CDvin-list-generator-service.name +- mzId: CD_vin-list-generator-service/management-zone/CDvin-list-generator-service.id +- tag: vin-list-generator-service +- skipDeployment: "true" +#Configuration +CDvin-list-generator-service-INT-TEST.EMEA-PreProd: +- name: CD_vin-list-generator-service INT-TEST +- mzName: CD_vin-list-generator-service/management-zone/CDvin-list-generator-service.name +- mzId: CD_vin-list-generator-service/management-zone/CDvin-list-generator-service.id +- tag: vin-list-generator-service +- skipDeployment: "false" +CDvin-list-generator-service-INT-TEST.NA-PreProd: +- name: CD_vin-list-generator-service INT-TEST +- mzName: CD_vin-list-generator-service/management-zone/CDvin-list-generator-service.name +- mzId: CD_vin-list-generator-service/management-zone/CDvin-list-generator-service.id +- env: INT +- skipDeployment: "false" +CDvin-list-generator-service-INT-TEST.CN-PreProd: +- name: CD_vin-list-generator-service INT-TEST +- mzName: CD_vin-list-generator-service/management-zone/CDvin-list-generator-service.name +- mzId: CD_vin-list-generator-service/management-zone/CDvin-list-generator-service.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vin-list-generator-service/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_vin-list-generator-service/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vin-list-generator-service/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vin-list-generator-service/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_vin-list-generator-service/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..dcfda83e --- /dev/null +++ b/BMW-Dynatrace-config/CD_vin-list-generator-service/dashboard/defaultPRODE2E.json @@ -0,0 +1,300 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 76, + "left": 836, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 646, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:PROD", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vin-list-generator-service/management-zone/README.md b/BMW-Dynatrace-config/CD_vin-list-generator-service/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vin-list-generator-service/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_vin-list-generator-service/management-zone/default.json b/BMW-Dynatrace-config/CD_vin-list-generator-service/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_vin-list-generator-service/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vin-list-generator-service/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_vin-list-generator-service/management-zone/management-zone.yaml new file mode 100644 index 00000000..fab9d9b2 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vin-list-generator-service/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDvin-list-generator-service: default.json + +CDvin-list-generator-service: +- name: CD_vin-list-generator-service +- tag: vin-list-generator-service diff --git a/BMW-Dynatrace-config/CD_vin-list-generator-service/notification/README.md b/BMW-Dynatrace-config/CD_vin-list-generator-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vin-list-generator-service/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vin-list-generator-service/notification/email.json b/BMW-Dynatrace-config/CD_vin-list-generator-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vin-list-generator-service/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vin-list-generator-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_vin-list-generator-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vin-list-generator-service/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vin-list-generator-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_vin-list-generator-service/notification/notification.yaml new file mode 100644 index 00000000..dab65c9c --- /dev/null +++ b/BMW-Dynatrace-config/CD_vin-list-generator-service/notification/notification.yaml @@ -0,0 +1,76 @@ +config: +- CDvin-list-generator-service-PROD: msTeams.json +- CDvin-list-generator-service-E2E: msTeams.json +- CDvin-list-generator-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvin-list-generator-service-PROD: +- name: CD_vin-list-generator-service PROD +- alertingProfile: CD_vin-list-generator-service/alerting-profile/CDvin-list-generator-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvin-list-generator-service-PROD.EMEA-Prod: +- name: CD_vin-list-generator-service PROD +- alertingProfile: CD_vin-list-generator-service/alerting-profile/CDvin-list-generator-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvin-list-generator-service-PROD.NA-Prod: +- name: CD_vin-list-generator-service PROD +- alertingProfile: CD_vin-list-generator-service/alerting-profile/CDvin-list-generator-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvin-list-generator-service-PROD.CN-Prod: +- name: CD_vin-list-generator-service PROD +- alertingProfile: CD_vin-list-generator-service/alerting-profile/CDvin-list-generator-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#E2E notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvin-list-generator-service-E2E: +- name: CD_vin-list-generator-service E2E +- alertingProfile: CD_vin-list-generator-service/alerting-profile/CDvin-list-generator-service-E2E.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvin-list-generator-service-E2E.EMEA-Prod: +- name: CD_vin-list-generator-service E2E +- alertingProfile: CD_vin-list-generator-service/alerting-profile/CDvin-list-generator-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDvin-list-generator-service-E2E.NA-Prod: +- name: CD_vin-list-generator-service E2E +- alertingProfile: CD_vin-list-generator-service/alerting-profile/CDvin-list-generator-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" +CDvin-list-generator-service-E2E.CN-Prod: +- name: CD_vin-list-generator-service E2E +- alertingProfile: CD_vin-list-generator-service/alerting-profile/CDvin-list-generator-service-E2E.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvin-list-generator-service-INT: +- name: CD_vin-list-generator-service INT +- alertingProfile: CD_vin-list-generator-service/alerting-profile/CDvin-list-generator-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvin-list-generator-service-INT.EMEA-PreProd: +- name: CD_vin-list-generator-service INT +- alertingProfile: CD_vin-list-generator-service/alerting-profile/CDvin-list-generator-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvin-list-generator-service-INT.NA-PreProd: +- name: CD_vin-list-generator-service INT +- alertingProfile: CD_vin-list-generator-service/alerting-profile/CDvin-list-generator-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvin-list-generator-service-INT.CN-PreProd: +- name: CD_vin-list-generator-service INT +- alertingProfile: CD_vin-list-generator-service/alerting-profile/CDvin-list-generator-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vin-list-generator-service/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_vin-list-generator-service/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_vin-list-generator-service/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vin-list-generator-service/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_vin-list-generator-service/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_vin-list-generator-service/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vin-list-generator-service/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_vin-list-generator-service/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..ccde1ee1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vin-list-generator-service/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- vin-list-generator-service: default.json + +vin-list-generator-service: +- name: CD_vin-list-generator-service - +- mzName: CD_vin-list-generator-service/management-zone/CDvin-list-generator-service.name +- mzId: CD_vin-list-generator-service/management-zone/CDvin-list-generator-service.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-admin/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_vps-admin/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..922f9fa8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-admin/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDvps-admin-PROD: default.json +- CDvps-admin-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDvps-admin-PROD: +- name: CD_vps-admin PROD +- tag: vps-admin +- mzId: CD_vps-admin/management-zone/CDvps-admin.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDvps-admin-PROD.EMEA-Prod: +- name: CD_vps-admin PROD +- tag: vps-admin +- mzId: CD_vps-admin/management-zone/CDvps-admin.id +- env: PROD +- skipDeployment: "false" +CDvps-admin-PROD.NA-Prod: +- name: CD_vps-admin PROD +- tag: vps-admin +- mzId: CD_vps-admin/management-zone/CDvps-admin.id +- env: PROD +- skipDeployment: "false" +CDvps-admin-PROD.CN-Prod: +- name: CD_vps-admin PROD +- tag: vps-admin +- mzId: CD_vps-admin/management-zone/CDvps-admin.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDvps-admin-INT: +- name: CD_vps-admin INT +- tag: vps-admin +- mzId: CD_vps-admin/management-zone/CDvps-admin.id +- env: INT +- skipDeployment: "true" +#Configuration +CDvps-admin-INT.EMEA-PreProd: +- name: CD_vps-admin INT +- tag: vps-admin +- mzId: CD_vps-admin/management-zone/CDvps-admin.id +- env: INT +- skipDeployment: "false" +CDvps-admin-INT.NA-PreProd: +- name: CD_vps-admin INT +- tag: vps-admin +- mzId: CD_vps-admin/management-zone/CDvps-admin.id +- env: INT +- skipDeployment: "false" +CDvps-admin-INT.CN-PreProd: +- name: CD_vps-admin INT +- tag: vps-admin +- mzId: CD_vps-admin/management-zone/CDvps-admin.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-admin/alerting-profile/default.json b/BMW-Dynatrace-config/CD_vps-admin/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-admin/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-admin/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_vps-admin/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-admin/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-admin/custom-service-java/README.md b/BMW-Dynatrace-config/CD_vps-admin/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-admin/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-admin/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_vps-admin/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-admin/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-admin/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_vps-admin/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-admin/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-admin/dashboard/README.md b/BMW-Dynatrace-config/CD_vps-admin/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-admin/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-admin/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_vps-admin/dashboard/dashboard.yaml new file mode 100644 index 00000000..8a893480 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-admin/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDvps-admin-PROD-E2E: defaultPRODE2E.json +- CDvps-admin-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDvps-admin-PROD-E2E: +- name: CD_vps-admin PROD-E2E +- mzName: CD_vps-admin/management-zone/CDvps-admin.name +- mzId: CD_vps-admin/management-zone/CDvps-admin.id +- skipDeployment: "true" +#Configuration +CDvps-admin-PROD-E2E.EMEA-Prod: +- name: CD_vps-admin PROD-E2E +- mzName: CD_vps-admin/management-zone/CDvps-admin.name +- mzId: CD_vps-admin/management-zone/CDvps-admin.id +- tag: vps-admin +- skipDeployment: "false" +CDvps-admin-PROD-E2E.NA-Prod: +- name: CD_vps-admin PROD-E2E +- mzName: CD_vps-admin/management-zone/CDvps-admin.name +- mzId: CD_vps-admin/management-zone/CDvps-admin.id +- tag: vps-admin +- skipDeployment: "false" +CDvps-admin-PROD-E2E.CN-Prod: +- name: CD_vps-admin PROD-E2E +- mzName: CD_vps-admin/management-zone/CDvps-admin.name +- mzId: CD_vps-admin/management-zone/CDvps-admin.id +- tag: vps-admin +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDvps-admin-INT-TEST: +- name: CD_vps-admin INT-TEST +- mzName: CD_vps-admin/management-zone/CDvps-admin.name +- mzId: CD_vps-admin/management-zone/CDvps-admin.id +- tag: vps-admin +- skipDeployment: "true" +#Configuration +CDvps-admin-INT-TEST.EMEA-PreProd: +- name: CD_vps-admin INT-TEST +- mzName: CD_vps-admin/management-zone/CDvps-admin.name +- mzId: CD_vps-admin/management-zone/CDvps-admin.id +- tag: vps-admin +- skipDeployment: "false" +CDvps-admin-INT-TEST.NA-PreProd: +- name: CD_vps-admin INT-TEST +- mzName: CD_vps-admin/management-zone/CDvps-admin.name +- mzId: CD_vps-admin/management-zone/CDvps-admin.id +- env: INT +- skipDeployment: "false" +CDvps-admin-INT-TEST.CN-PreProd: +- name: CD_vps-admin INT-TEST +- mzName: CD_vps-admin/management-zone/CDvps-admin.name +- mzId: CD_vps-admin/management-zone/CDvps-admin.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-admin/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_vps-admin/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-admin/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-admin/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_vps-admin/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-admin/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-admin/management-zone/README.md b/BMW-Dynatrace-config/CD_vps-admin/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-admin/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_vps-admin/management-zone/default.json b/BMW-Dynatrace-config/CD_vps-admin/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-admin/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-admin/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_vps-admin/management-zone/management-zone.yaml new file mode 100644 index 00000000..47df7768 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-admin/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDvps-admin: default.json + +CDvps-admin: +- name: CD_vps-admin +- tag: vps-admin diff --git a/BMW-Dynatrace-config/CD_vps-admin/notification/README.md b/BMW-Dynatrace-config/CD_vps-admin/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-admin/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-admin/notification/email.json b/BMW-Dynatrace-config/CD_vps-admin/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-admin/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-admin/notification/msTeams.json b/BMW-Dynatrace-config/CD_vps-admin/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-admin/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-admin/notification/notification.yaml b/BMW-Dynatrace-config/CD_vps-admin/notification/notification.yaml new file mode 100644 index 00000000..e3bc914b --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-admin/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDvps-admin-PROD: msTeams.json +- CDvps-admin-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvps-admin-PROD: +- name: CD_vps-admin PROD +- alertingProfile: CD_vps-admin/alerting-profile/CDvps-admin-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvps-admin-PROD.EMEA-Prod: +- name: CD_vps-admin PROD +- alertingProfile: CD_vps-admin/alerting-profile/CDvps-admin-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvps-admin-PROD.NA-Prod: +- name: CD_vps-admin PROD +- alertingProfile: CD_vps-admin/alerting-profile/CDvps-admin-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvps-admin-PROD.CN-Prod: +- name: CD_vps-admin PROD +- alertingProfile: CD_vps-admin/alerting-profile/CDvps-admin-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvps-admin-INT: +- name: CD_vps-admin INT +- alertingProfile: CD_vps-admin/alerting-profile/CDvps-admin-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvps-admin-INT.EMEA-PreProd: +- name: CD_vps-admin INT +- alertingProfile: CD_vps-admin/alerting-profile/CDvps-admin-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvps-admin-INT.NA-PreProd: +- name: CD_vps-admin INT +- alertingProfile: CD_vps-admin/alerting-profile/CDvps-admin-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvps-admin-INT.CN-PreProd: +- name: CD_vps-admin INT +- alertingProfile: CD_vps-admin/alerting-profile/CDvps-admin-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-admin/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_vps-admin/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-admin/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-admin/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_vps-admin/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-admin/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-admin/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_vps-admin/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..b04895c9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-admin/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- vps-admin: default.json + +vps-admin: +- name: CD_vps-admin - +- mzName: CD_vps-admin/management-zone/CDvps-admin.name +- mzId: CD_vps-admin/management-zone/CDvps-admin.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-archive/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_vps-archive/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..36d67013 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-archive/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDvps-archive-PROD: default.json +- CDvps-archive-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDvps-archive-PROD: +- name: CD_vps-archive PROD +- tag: vps-archive +- mzId: CD_vps-archive/management-zone/CDvps-archive.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDvps-archive-PROD.EMEA-Prod: +- name: CD_vps-archive PROD +- tag: vps-archive +- mzId: CD_vps-archive/management-zone/CDvps-archive.id +- env: PROD +- skipDeployment: "false" +CDvps-archive-PROD.NA-Prod: +- name: CD_vps-archive PROD +- tag: vps-archive +- mzId: CD_vps-archive/management-zone/CDvps-archive.id +- env: PROD +- skipDeployment: "false" +CDvps-archive-PROD.CN-Prod: +- name: CD_vps-archive PROD +- tag: vps-archive +- mzId: CD_vps-archive/management-zone/CDvps-archive.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDvps-archive-INT: +- name: CD_vps-archive INT +- tag: vps-archive +- mzId: CD_vps-archive/management-zone/CDvps-archive.id +- env: INT +- skipDeployment: "true" +#Configuration +CDvps-archive-INT.EMEA-PreProd: +- name: CD_vps-archive INT +- tag: vps-archive +- mzId: CD_vps-archive/management-zone/CDvps-archive.id +- env: INT +- skipDeployment: "false" +CDvps-archive-INT.NA-PreProd: +- name: CD_vps-archive INT +- tag: vps-archive +- mzId: CD_vps-archive/management-zone/CDvps-archive.id +- env: INT +- skipDeployment: "false" +CDvps-archive-INT.CN-PreProd: +- name: CD_vps-archive INT +- tag: vps-archive +- mzId: CD_vps-archive/management-zone/CDvps-archive.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-archive/alerting-profile/default.json b/BMW-Dynatrace-config/CD_vps-archive/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-archive/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-archive/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_vps-archive/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-archive/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-archive/custom-service-java/README.md b/BMW-Dynatrace-config/CD_vps-archive/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-archive/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-archive/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_vps-archive/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-archive/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-archive/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_vps-archive/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-archive/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-archive/dashboard/README.md b/BMW-Dynatrace-config/CD_vps-archive/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-archive/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-archive/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_vps-archive/dashboard/dashboard.yaml new file mode 100644 index 00000000..74592101 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-archive/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDvps-archive-PROD-E2E: defaultPRODE2E.json +- CDvps-archive-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDvps-archive-PROD-E2E: +- name: CD_vps-archive PROD-E2E +- mzName: CD_vps-archive/management-zone/CDvps-archive.name +- mzId: CD_vps-archive/management-zone/CDvps-archive.id +- skipDeployment: "true" +#Configuration +CDvps-archive-PROD-E2E.EMEA-Prod: +- name: CD_vps-archive PROD-E2E +- mzName: CD_vps-archive/management-zone/CDvps-archive.name +- mzId: CD_vps-archive/management-zone/CDvps-archive.id +- tag: vps-archive +- skipDeployment: "false" +CDvps-archive-PROD-E2E.NA-Prod: +- name: CD_vps-archive PROD-E2E +- mzName: CD_vps-archive/management-zone/CDvps-archive.name +- mzId: CD_vps-archive/management-zone/CDvps-archive.id +- tag: vps-archive +- skipDeployment: "false" +CDvps-archive-PROD-E2E.CN-Prod: +- name: CD_vps-archive PROD-E2E +- mzName: CD_vps-archive/management-zone/CDvps-archive.name +- mzId: CD_vps-archive/management-zone/CDvps-archive.id +- tag: vps-archive +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDvps-archive-INT-TEST: +- name: CD_vps-archive INT-TEST +- mzName: CD_vps-archive/management-zone/CDvps-archive.name +- mzId: CD_vps-archive/management-zone/CDvps-archive.id +- tag: vps-archive +- skipDeployment: "true" +#Configuration +CDvps-archive-INT-TEST.EMEA-PreProd: +- name: CD_vps-archive INT-TEST +- mzName: CD_vps-archive/management-zone/CDvps-archive.name +- mzId: CD_vps-archive/management-zone/CDvps-archive.id +- tag: vps-archive +- skipDeployment: "false" +CDvps-archive-INT-TEST.NA-PreProd: +- name: CD_vps-archive INT-TEST +- mzName: CD_vps-archive/management-zone/CDvps-archive.name +- mzId: CD_vps-archive/management-zone/CDvps-archive.id +- env: INT +- skipDeployment: "false" +CDvps-archive-INT-TEST.CN-PreProd: +- name: CD_vps-archive INT-TEST +- mzName: CD_vps-archive/management-zone/CDvps-archive.name +- mzId: CD_vps-archive/management-zone/CDvps-archive.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-archive/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_vps-archive/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-archive/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-archive/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_vps-archive/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-archive/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-archive/management-zone/README.md b/BMW-Dynatrace-config/CD_vps-archive/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-archive/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_vps-archive/management-zone/default.json b/BMW-Dynatrace-config/CD_vps-archive/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-archive/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-archive/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_vps-archive/management-zone/management-zone.yaml new file mode 100644 index 00000000..c09b71fb --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-archive/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDvps-archive: default.json + +CDvps-archive: +- name: CD_vps-archive +- tag: vps-archive diff --git a/BMW-Dynatrace-config/CD_vps-archive/notification/README.md b/BMW-Dynatrace-config/CD_vps-archive/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-archive/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-archive/notification/email.json b/BMW-Dynatrace-config/CD_vps-archive/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-archive/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-archive/notification/msTeams.json b/BMW-Dynatrace-config/CD_vps-archive/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-archive/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-archive/notification/notification.yaml b/BMW-Dynatrace-config/CD_vps-archive/notification/notification.yaml new file mode 100644 index 00000000..74d8a03e --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-archive/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDvps-archive-PROD: msTeams.json +- CDvps-archive-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvps-archive-PROD: +- name: CD_vps-archive PROD +- alertingProfile: CD_vps-archive/alerting-profile/CDvps-archive-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvps-archive-PROD.EMEA-Prod: +- name: CD_vps-archive PROD +- alertingProfile: CD_vps-archive/alerting-profile/CDvps-archive-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvps-archive-PROD.NA-Prod: +- name: CD_vps-archive PROD +- alertingProfile: CD_vps-archive/alerting-profile/CDvps-archive-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvps-archive-PROD.CN-Prod: +- name: CD_vps-archive PROD +- alertingProfile: CD_vps-archive/alerting-profile/CDvps-archive-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvps-archive-INT: +- name: CD_vps-archive INT +- alertingProfile: CD_vps-archive/alerting-profile/CDvps-archive-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvps-archive-INT.EMEA-PreProd: +- name: CD_vps-archive INT +- alertingProfile: CD_vps-archive/alerting-profile/CDvps-archive-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvps-archive-INT.NA-PreProd: +- name: CD_vps-archive INT +- alertingProfile: CD_vps-archive/alerting-profile/CDvps-archive-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvps-archive-INT.CN-PreProd: +- name: CD_vps-archive INT +- alertingProfile: CD_vps-archive/alerting-profile/CDvps-archive-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-archive/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_vps-archive/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-archive/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-archive/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_vps-archive/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-archive/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-archive/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_vps-archive/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..bdfee635 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-archive/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- vps-archive: default.json + +vps-archive: +- name: CD_vps-archive - +- mzName: CD_vps-archive/management-zone/CDvps-archive.name +- mzId: CD_vps-archive/management-zone/CDvps-archive.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-monitor/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_vps-monitor/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..7768af20 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-monitor/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDvps-monitor-PROD: default.json +- CDvps-monitor-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDvps-monitor-PROD: +- name: CD_vps-monitor PROD +- tag: vps-monitor +- mzId: CD_vps-monitor/management-zone/CDvps-monitor.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDvps-monitor-PROD.EMEA-Prod: +- name: CD_vps-monitor PROD +- tag: vps-monitor +- mzId: CD_vps-monitor/management-zone/CDvps-monitor.id +- env: PROD +- skipDeployment: "false" +CDvps-monitor-PROD.NA-Prod: +- name: CD_vps-monitor PROD +- tag: vps-monitor +- mzId: CD_vps-monitor/management-zone/CDvps-monitor.id +- env: PROD +- skipDeployment: "false" +CDvps-monitor-PROD.CN-Prod: +- name: CD_vps-monitor PROD +- tag: vps-monitor +- mzId: CD_vps-monitor/management-zone/CDvps-monitor.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDvps-monitor-INT: +- name: CD_vps-monitor INT +- tag: vps-monitor +- mzId: CD_vps-monitor/management-zone/CDvps-monitor.id +- env: INT +- skipDeployment: "true" +#Configuration +CDvps-monitor-INT.EMEA-PreProd: +- name: CD_vps-monitor INT +- tag: vps-monitor +- mzId: CD_vps-monitor/management-zone/CDvps-monitor.id +- env: INT +- skipDeployment: "false" +CDvps-monitor-INT.NA-PreProd: +- name: CD_vps-monitor INT +- tag: vps-monitor +- mzId: CD_vps-monitor/management-zone/CDvps-monitor.id +- env: INT +- skipDeployment: "false" +CDvps-monitor-INT.CN-PreProd: +- name: CD_vps-monitor INT +- tag: vps-monitor +- mzId: CD_vps-monitor/management-zone/CDvps-monitor.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-monitor/alerting-profile/default.json b/BMW-Dynatrace-config/CD_vps-monitor/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-monitor/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-monitor/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_vps-monitor/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-monitor/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-monitor/custom-service-java/README.md b/BMW-Dynatrace-config/CD_vps-monitor/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-monitor/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-monitor/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_vps-monitor/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-monitor/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-monitor/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_vps-monitor/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-monitor/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-monitor/dashboard/README.md b/BMW-Dynatrace-config/CD_vps-monitor/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-monitor/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-monitor/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_vps-monitor/dashboard/dashboard.yaml new file mode 100644 index 00000000..a422efca --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-monitor/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDvps-monitor-PROD-E2E: defaultPRODE2E.json +- CDvps-monitor-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDvps-monitor-PROD-E2E: +- name: CD_vps-monitor PROD-E2E +- mzName: CD_vps-monitor/management-zone/CDvps-monitor.name +- mzId: CD_vps-monitor/management-zone/CDvps-monitor.id +- skipDeployment: "true" +#Configuration +CDvps-monitor-PROD-E2E.EMEA-Prod: +- name: CD_vps-monitor PROD-E2E +- mzName: CD_vps-monitor/management-zone/CDvps-monitor.name +- mzId: CD_vps-monitor/management-zone/CDvps-monitor.id +- tag: vps-monitor +- skipDeployment: "false" +CDvps-monitor-PROD-E2E.NA-Prod: +- name: CD_vps-monitor PROD-E2E +- mzName: CD_vps-monitor/management-zone/CDvps-monitor.name +- mzId: CD_vps-monitor/management-zone/CDvps-monitor.id +- tag: vps-monitor +- skipDeployment: "false" +CDvps-monitor-PROD-E2E.CN-Prod: +- name: CD_vps-monitor PROD-E2E +- mzName: CD_vps-monitor/management-zone/CDvps-monitor.name +- mzId: CD_vps-monitor/management-zone/CDvps-monitor.id +- tag: vps-monitor +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDvps-monitor-INT-TEST: +- name: CD_vps-monitor INT-TEST +- mzName: CD_vps-monitor/management-zone/CDvps-monitor.name +- mzId: CD_vps-monitor/management-zone/CDvps-monitor.id +- tag: vps-monitor +- skipDeployment: "true" +#Configuration +CDvps-monitor-INT-TEST.EMEA-PreProd: +- name: CD_vps-monitor INT-TEST +- mzName: CD_vps-monitor/management-zone/CDvps-monitor.name +- mzId: CD_vps-monitor/management-zone/CDvps-monitor.id +- tag: vps-monitor +- skipDeployment: "false" +CDvps-monitor-INT-TEST.NA-PreProd: +- name: CD_vps-monitor INT-TEST +- mzName: CD_vps-monitor/management-zone/CDvps-monitor.name +- mzId: CD_vps-monitor/management-zone/CDvps-monitor.id +- env: INT +- skipDeployment: "false" +CDvps-monitor-INT-TEST.CN-PreProd: +- name: CD_vps-monitor INT-TEST +- mzName: CD_vps-monitor/management-zone/CDvps-monitor.name +- mzId: CD_vps-monitor/management-zone/CDvps-monitor.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-monitor/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_vps-monitor/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-monitor/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-monitor/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_vps-monitor/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-monitor/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-monitor/management-zone/README.md b/BMW-Dynatrace-config/CD_vps-monitor/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-monitor/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_vps-monitor/management-zone/default.json b/BMW-Dynatrace-config/CD_vps-monitor/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-monitor/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-monitor/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_vps-monitor/management-zone/management-zone.yaml new file mode 100644 index 00000000..e6f61d77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-monitor/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDvps-monitor: default.json + +CDvps-monitor: +- name: CD_vps-monitor +- tag: vps-monitor diff --git a/BMW-Dynatrace-config/CD_vps-monitor/notification/README.md b/BMW-Dynatrace-config/CD_vps-monitor/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-monitor/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-monitor/notification/email.json b/BMW-Dynatrace-config/CD_vps-monitor/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-monitor/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-monitor/notification/msTeams.json b/BMW-Dynatrace-config/CD_vps-monitor/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-monitor/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-monitor/notification/notification.yaml b/BMW-Dynatrace-config/CD_vps-monitor/notification/notification.yaml new file mode 100644 index 00000000..bd4a2d08 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-monitor/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDvps-monitor-PROD: msTeams.json +- CDvps-monitor-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvps-monitor-PROD: +- name: CD_vps-monitor PROD +- alertingProfile: CD_vps-monitor/alerting-profile/CDvps-monitor-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvps-monitor-PROD.EMEA-Prod: +- name: CD_vps-monitor PROD +- alertingProfile: CD_vps-monitor/alerting-profile/CDvps-monitor-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvps-monitor-PROD.NA-Prod: +- name: CD_vps-monitor PROD +- alertingProfile: CD_vps-monitor/alerting-profile/CDvps-monitor-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvps-monitor-PROD.CN-Prod: +- name: CD_vps-monitor PROD +- alertingProfile: CD_vps-monitor/alerting-profile/CDvps-monitor-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvps-monitor-INT: +- name: CD_vps-monitor INT +- alertingProfile: CD_vps-monitor/alerting-profile/CDvps-monitor-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvps-monitor-INT.EMEA-PreProd: +- name: CD_vps-monitor INT +- alertingProfile: CD_vps-monitor/alerting-profile/CDvps-monitor-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvps-monitor-INT.NA-PreProd: +- name: CD_vps-monitor INT +- alertingProfile: CD_vps-monitor/alerting-profile/CDvps-monitor-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvps-monitor-INT.CN-PreProd: +- name: CD_vps-monitor INT +- alertingProfile: CD_vps-monitor/alerting-profile/CDvps-monitor-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-monitor/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_vps-monitor/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-monitor/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-monitor/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_vps-monitor/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-monitor/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-monitor/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_vps-monitor/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..065883fe --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-monitor/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- vps-monitor: default.json + +vps-monitor: +- name: CD_vps-monitor - +- mzName: CD_vps-monitor/management-zone/CDvps-monitor.name +- mzId: CD_vps-monitor/management-zone/CDvps-monitor.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-prov/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_vps-prov/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..d6722805 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-prov/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDvps-prov-PROD: default.json +- CDvps-prov-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDvps-prov-PROD: +- name: CD_vps-prov PROD +- tag: vps-prov +- mzId: CD_vps-prov/management-zone/CDvps-prov.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDvps-prov-PROD.EMEA-Prod: +- name: CD_vps-prov PROD +- tag: vps-prov +- mzId: CD_vps-prov/management-zone/CDvps-prov.id +- env: PROD +- skipDeployment: "false" +CDvps-prov-PROD.NA-Prod: +- name: CD_vps-prov PROD +- tag: vps-prov +- mzId: CD_vps-prov/management-zone/CDvps-prov.id +- env: PROD +- skipDeployment: "false" +CDvps-prov-PROD.CN-Prod: +- name: CD_vps-prov PROD +- tag: vps-prov +- mzId: CD_vps-prov/management-zone/CDvps-prov.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDvps-prov-INT: +- name: CD_vps-prov INT +- tag: vps-prov +- mzId: CD_vps-prov/management-zone/CDvps-prov.id +- env: INT +- skipDeployment: "true" +#Configuration +CDvps-prov-INT.EMEA-PreProd: +- name: CD_vps-prov INT +- tag: vps-prov +- mzId: CD_vps-prov/management-zone/CDvps-prov.id +- env: INT +- skipDeployment: "false" +CDvps-prov-INT.NA-PreProd: +- name: CD_vps-prov INT +- tag: vps-prov +- mzId: CD_vps-prov/management-zone/CDvps-prov.id +- env: INT +- skipDeployment: "false" +CDvps-prov-INT.CN-PreProd: +- name: CD_vps-prov INT +- tag: vps-prov +- mzId: CD_vps-prov/management-zone/CDvps-prov.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-prov/alerting-profile/default.json b/BMW-Dynatrace-config/CD_vps-prov/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-prov/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-prov/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_vps-prov/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-prov/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-prov/custom-service-java/README.md b/BMW-Dynatrace-config/CD_vps-prov/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-prov/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-prov/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_vps-prov/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-prov/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-prov/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_vps-prov/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-prov/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-prov/dashboard/README.md b/BMW-Dynatrace-config/CD_vps-prov/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-prov/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-prov/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_vps-prov/dashboard/dashboard.yaml new file mode 100644 index 00000000..cba017cf --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-prov/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDvps-prov-PROD-E2E: defaultPRODE2E.json +- CDvps-prov-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDvps-prov-PROD-E2E: +- name: CD_vps-prov PROD-E2E +- mzName: CD_vps-prov/management-zone/CDvps-prov.name +- mzId: CD_vps-prov/management-zone/CDvps-prov.id +- skipDeployment: "true" +#Configuration +CDvps-prov-PROD-E2E.EMEA-Prod: +- name: CD_vps-prov PROD-E2E +- mzName: CD_vps-prov/management-zone/CDvps-prov.name +- mzId: CD_vps-prov/management-zone/CDvps-prov.id +- tag: vps-prov +- skipDeployment: "false" +CDvps-prov-PROD-E2E.NA-Prod: +- name: CD_vps-prov PROD-E2E +- mzName: CD_vps-prov/management-zone/CDvps-prov.name +- mzId: CD_vps-prov/management-zone/CDvps-prov.id +- tag: vps-prov +- skipDeployment: "false" +CDvps-prov-PROD-E2E.CN-Prod: +- name: CD_vps-prov PROD-E2E +- mzName: CD_vps-prov/management-zone/CDvps-prov.name +- mzId: CD_vps-prov/management-zone/CDvps-prov.id +- tag: vps-prov +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDvps-prov-INT-TEST: +- name: CD_vps-prov INT-TEST +- mzName: CD_vps-prov/management-zone/CDvps-prov.name +- mzId: CD_vps-prov/management-zone/CDvps-prov.id +- tag: vps-prov +- skipDeployment: "true" +#Configuration +CDvps-prov-INT-TEST.EMEA-PreProd: +- name: CD_vps-prov INT-TEST +- mzName: CD_vps-prov/management-zone/CDvps-prov.name +- mzId: CD_vps-prov/management-zone/CDvps-prov.id +- tag: vps-prov +- skipDeployment: "false" +CDvps-prov-INT-TEST.NA-PreProd: +- name: CD_vps-prov INT-TEST +- mzName: CD_vps-prov/management-zone/CDvps-prov.name +- mzId: CD_vps-prov/management-zone/CDvps-prov.id +- env: INT +- skipDeployment: "false" +CDvps-prov-INT-TEST.CN-PreProd: +- name: CD_vps-prov INT-TEST +- mzName: CD_vps-prov/management-zone/CDvps-prov.name +- mzId: CD_vps-prov/management-zone/CDvps-prov.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-prov/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_vps-prov/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-prov/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-prov/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_vps-prov/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-prov/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-prov/management-zone/README.md b/BMW-Dynatrace-config/CD_vps-prov/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-prov/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_vps-prov/management-zone/default.json b/BMW-Dynatrace-config/CD_vps-prov/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-prov/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-prov/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_vps-prov/management-zone/management-zone.yaml new file mode 100644 index 00000000..671ce1fd --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-prov/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDvps-prov: default.json + +CDvps-prov: +- name: CD_vps-prov +- tag: vps-prov diff --git a/BMW-Dynatrace-config/CD_vps-prov/notification/README.md b/BMW-Dynatrace-config/CD_vps-prov/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-prov/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-prov/notification/email.json b/BMW-Dynatrace-config/CD_vps-prov/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-prov/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-prov/notification/msTeams.json b/BMW-Dynatrace-config/CD_vps-prov/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-prov/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-prov/notification/notification.yaml b/BMW-Dynatrace-config/CD_vps-prov/notification/notification.yaml new file mode 100644 index 00000000..33caf5d3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-prov/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDvps-prov-PROD: msTeams.json +- CDvps-prov-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvps-prov-PROD: +- name: CD_vps-prov PROD +- alertingProfile: CD_vps-prov/alerting-profile/CDvps-prov-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvps-prov-PROD.EMEA-Prod: +- name: CD_vps-prov PROD +- alertingProfile: CD_vps-prov/alerting-profile/CDvps-prov-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvps-prov-PROD.NA-Prod: +- name: CD_vps-prov PROD +- alertingProfile: CD_vps-prov/alerting-profile/CDvps-prov-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvps-prov-PROD.CN-Prod: +- name: CD_vps-prov PROD +- alertingProfile: CD_vps-prov/alerting-profile/CDvps-prov-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvps-prov-INT: +- name: CD_vps-prov INT +- alertingProfile: CD_vps-prov/alerting-profile/CDvps-prov-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvps-prov-INT.EMEA-PreProd: +- name: CD_vps-prov INT +- alertingProfile: CD_vps-prov/alerting-profile/CDvps-prov-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvps-prov-INT.NA-PreProd: +- name: CD_vps-prov INT +- alertingProfile: CD_vps-prov/alerting-profile/CDvps-prov-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvps-prov-INT.CN-PreProd: +- name: CD_vps-prov INT +- alertingProfile: CD_vps-prov/alerting-profile/CDvps-prov-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-prov/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_vps-prov/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-prov/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-prov/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_vps-prov/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-prov/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-prov/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_vps-prov/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..55d3ca75 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-prov/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- vps-prov: default.json + +vps-prov: +- name: CD_vps-prov - +- mzName: CD_vps-prov/management-zone/CDvps-prov.name +- mzId: CD_vps-prov/management-zone/CDvps-prov.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-trigger/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_vps-trigger/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..8ae6e2c8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-trigger/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDvps-trigger-PROD: default.json +- CDvps-trigger-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDvps-trigger-PROD: +- name: CD_vps-trigger PROD +- tag: vps-trigger +- mzId: CD_vps-trigger/management-zone/CDvps-trigger.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDvps-trigger-PROD.EMEA-Prod: +- name: CD_vps-trigger PROD +- tag: vps-trigger +- mzId: CD_vps-trigger/management-zone/CDvps-trigger.id +- env: PROD +- skipDeployment: "false" +CDvps-trigger-PROD.NA-Prod: +- name: CD_vps-trigger PROD +- tag: vps-trigger +- mzId: CD_vps-trigger/management-zone/CDvps-trigger.id +- env: PROD +- skipDeployment: "false" +CDvps-trigger-PROD.CN-Prod: +- name: CD_vps-trigger PROD +- tag: vps-trigger +- mzId: CD_vps-trigger/management-zone/CDvps-trigger.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDvps-trigger-INT: +- name: CD_vps-trigger INT +- tag: vps-trigger +- mzId: CD_vps-trigger/management-zone/CDvps-trigger.id +- env: INT +- skipDeployment: "true" +#Configuration +CDvps-trigger-INT.EMEA-PreProd: +- name: CD_vps-trigger INT +- tag: vps-trigger +- mzId: CD_vps-trigger/management-zone/CDvps-trigger.id +- env: INT +- skipDeployment: "false" +CDvps-trigger-INT.NA-PreProd: +- name: CD_vps-trigger INT +- tag: vps-trigger +- mzId: CD_vps-trigger/management-zone/CDvps-trigger.id +- env: INT +- skipDeployment: "false" +CDvps-trigger-INT.CN-PreProd: +- name: CD_vps-trigger INT +- tag: vps-trigger +- mzId: CD_vps-trigger/management-zone/CDvps-trigger.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-trigger/alerting-profile/default.json b/BMW-Dynatrace-config/CD_vps-trigger/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-trigger/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-trigger/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_vps-trigger/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-trigger/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-trigger/custom-service-java/README.md b/BMW-Dynatrace-config/CD_vps-trigger/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-trigger/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-trigger/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_vps-trigger/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-trigger/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-trigger/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_vps-trigger/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-trigger/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-trigger/dashboard/README.md b/BMW-Dynatrace-config/CD_vps-trigger/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-trigger/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-trigger/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_vps-trigger/dashboard/dashboard.yaml new file mode 100644 index 00000000..fdb873b9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-trigger/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDvps-trigger-PROD-E2E: defaultPRODE2E.json +- CDvps-trigger-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDvps-trigger-PROD-E2E: +- name: CD_vps-trigger PROD-E2E +- mzName: CD_vps-trigger/management-zone/CDvps-trigger.name +- mzId: CD_vps-trigger/management-zone/CDvps-trigger.id +- skipDeployment: "true" +#Configuration +CDvps-trigger-PROD-E2E.EMEA-Prod: +- name: CD_vps-trigger PROD-E2E +- mzName: CD_vps-trigger/management-zone/CDvps-trigger.name +- mzId: CD_vps-trigger/management-zone/CDvps-trigger.id +- tag: vps-trigger +- skipDeployment: "false" +CDvps-trigger-PROD-E2E.NA-Prod: +- name: CD_vps-trigger PROD-E2E +- mzName: CD_vps-trigger/management-zone/CDvps-trigger.name +- mzId: CD_vps-trigger/management-zone/CDvps-trigger.id +- tag: vps-trigger +- skipDeployment: "false" +CDvps-trigger-PROD-E2E.CN-Prod: +- name: CD_vps-trigger PROD-E2E +- mzName: CD_vps-trigger/management-zone/CDvps-trigger.name +- mzId: CD_vps-trigger/management-zone/CDvps-trigger.id +- tag: vps-trigger +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDvps-trigger-INT-TEST: +- name: CD_vps-trigger INT-TEST +- mzName: CD_vps-trigger/management-zone/CDvps-trigger.name +- mzId: CD_vps-trigger/management-zone/CDvps-trigger.id +- tag: vps-trigger +- skipDeployment: "true" +#Configuration +CDvps-trigger-INT-TEST.EMEA-PreProd: +- name: CD_vps-trigger INT-TEST +- mzName: CD_vps-trigger/management-zone/CDvps-trigger.name +- mzId: CD_vps-trigger/management-zone/CDvps-trigger.id +- tag: vps-trigger +- skipDeployment: "false" +CDvps-trigger-INT-TEST.NA-PreProd: +- name: CD_vps-trigger INT-TEST +- mzName: CD_vps-trigger/management-zone/CDvps-trigger.name +- mzId: CD_vps-trigger/management-zone/CDvps-trigger.id +- env: INT +- skipDeployment: "false" +CDvps-trigger-INT-TEST.CN-PreProd: +- name: CD_vps-trigger INT-TEST +- mzName: CD_vps-trigger/management-zone/CDvps-trigger.name +- mzId: CD_vps-trigger/management-zone/CDvps-trigger.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-trigger/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_vps-trigger/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-trigger/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-trigger/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_vps-trigger/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-trigger/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-trigger/management-zone/README.md b/BMW-Dynatrace-config/CD_vps-trigger/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-trigger/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_vps-trigger/management-zone/default.json b/BMW-Dynatrace-config/CD_vps-trigger/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-trigger/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-trigger/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_vps-trigger/management-zone/management-zone.yaml new file mode 100644 index 00000000..8b6d37cf --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-trigger/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDvps-trigger: default.json + +CDvps-trigger: +- name: CD_vps-trigger +- tag: vps-trigger diff --git a/BMW-Dynatrace-config/CD_vps-trigger/notification/README.md b/BMW-Dynatrace-config/CD_vps-trigger/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-trigger/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-trigger/notification/email.json b/BMW-Dynatrace-config/CD_vps-trigger/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-trigger/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-trigger/notification/msTeams.json b/BMW-Dynatrace-config/CD_vps-trigger/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-trigger/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-trigger/notification/notification.yaml b/BMW-Dynatrace-config/CD_vps-trigger/notification/notification.yaml new file mode 100644 index 00000000..4d19a6d9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-trigger/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDvps-trigger-PROD: msTeams.json +- CDvps-trigger-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvps-trigger-PROD: +- name: CD_vps-trigger PROD +- alertingProfile: CD_vps-trigger/alerting-profile/CDvps-trigger-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvps-trigger-PROD.EMEA-Prod: +- name: CD_vps-trigger PROD +- alertingProfile: CD_vps-trigger/alerting-profile/CDvps-trigger-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvps-trigger-PROD.NA-Prod: +- name: CD_vps-trigger PROD +- alertingProfile: CD_vps-trigger/alerting-profile/CDvps-trigger-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvps-trigger-PROD.CN-Prod: +- name: CD_vps-trigger PROD +- alertingProfile: CD_vps-trigger/alerting-profile/CDvps-trigger-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvps-trigger-INT: +- name: CD_vps-trigger INT +- alertingProfile: CD_vps-trigger/alerting-profile/CDvps-trigger-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvps-trigger-INT.EMEA-PreProd: +- name: CD_vps-trigger INT +- alertingProfile: CD_vps-trigger/alerting-profile/CDvps-trigger-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvps-trigger-INT.NA-PreProd: +- name: CD_vps-trigger INT +- alertingProfile: CD_vps-trigger/alerting-profile/CDvps-trigger-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvps-trigger-INT.CN-PreProd: +- name: CD_vps-trigger INT +- alertingProfile: CD_vps-trigger/alerting-profile/CDvps-trigger-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-trigger/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_vps-trigger/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-trigger/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-trigger/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_vps-trigger/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-trigger/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-trigger/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_vps-trigger/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..b76fbcf3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-trigger/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- vps-trigger: default.json + +vps-trigger: +- name: CD_vps-trigger - +- mzName: CD_vps-trigger/management-zone/CDvps-trigger.name +- mzId: CD_vps-trigger/management-zone/CDvps-trigger.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vs-api/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_vs-api/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..1315a6e5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vs-api/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDvs-api-PROD: default.json +- CDvs-api-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDvs-api-PROD: +- name: CD_vs-api PROD +- tag: vs-api +- mzId: CD_vs-api/management-zone/CDvs-api.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDvs-api-PROD.EMEA-Prod: +- name: CD_vs-api PROD +- tag: vs-api +- mzId: CD_vs-api/management-zone/CDvs-api.id +- env: PROD +- skipDeployment: "false" +CDvs-api-PROD.NA-Prod: +- name: CD_vs-api PROD +- tag: vs-api +- mzId: CD_vs-api/management-zone/CDvs-api.id +- env: PROD +- skipDeployment: "false" +CDvs-api-PROD.CN-Prod: +- name: CD_vs-api PROD +- tag: vs-api +- mzId: CD_vs-api/management-zone/CDvs-api.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDvs-api-INT: +- name: CD_vs-api INT +- tag: vs-api +- mzId: CD_vs-api/management-zone/CDvs-api.id +- env: INT +- skipDeployment: "true" +#Configuration +CDvs-api-INT.EMEA-PreProd: +- name: CD_vs-api INT +- tag: vs-api +- mzId: CD_vs-api/management-zone/CDvs-api.id +- env: INT +- skipDeployment: "false" +CDvs-api-INT.NA-PreProd: +- name: CD_vs-api INT +- tag: vs-api +- mzId: CD_vs-api/management-zone/CDvs-api.id +- env: INT +- skipDeployment: "false" +CDvs-api-INT.CN-PreProd: +- name: CD_vs-api INT +- tag: vs-api +- mzId: CD_vs-api/management-zone/CDvs-api.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vs-api/alerting-profile/default.json b/BMW-Dynatrace-config/CD_vs-api/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vs-api/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vs-api/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_vs-api/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_vs-api/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vs-api/custom-service-java/README.md b/BMW-Dynatrace-config/CD_vs-api/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vs-api/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vs-api/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_vs-api/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vs-api/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vs-api/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_vs-api/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vs-api/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vs-api/dashboard/README.md b/BMW-Dynatrace-config/CD_vs-api/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_vs-api/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vs-api/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_vs-api/dashboard/dashboard.yaml new file mode 100644 index 00000000..4763b7f5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vs-api/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDvs-api-PROD-E2E: defaultPRODE2E.json +- CDvs-api-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDvs-api-PROD-E2E: +- name: CD_vs-api PROD-E2E +- mzName: CD_vs-api/management-zone/CDvs-api.name +- mzId: CD_vs-api/management-zone/CDvs-api.id +- skipDeployment: "true" +#Configuration +CDvs-api-PROD-E2E.EMEA-Prod: +- name: CD_vs-api PROD-E2E +- mzName: CD_vs-api/management-zone/CDvs-api.name +- mzId: CD_vs-api/management-zone/CDvs-api.id +- tag: vs-api +- skipDeployment: "false" +CDvs-api-PROD-E2E.NA-Prod: +- name: CD_vs-api PROD-E2E +- mzName: CD_vs-api/management-zone/CDvs-api.name +- mzId: CD_vs-api/management-zone/CDvs-api.id +- tag: vs-api +- skipDeployment: "false" +CDvs-api-PROD-E2E.CN-Prod: +- name: CD_vs-api PROD-E2E +- mzName: CD_vs-api/management-zone/CDvs-api.name +- mzId: CD_vs-api/management-zone/CDvs-api.id +- tag: vs-api +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDvs-api-INT-TEST: +- name: CD_vs-api INT-TEST +- mzName: CD_vs-api/management-zone/CDvs-api.name +- mzId: CD_vs-api/management-zone/CDvs-api.id +- tag: vs-api +- skipDeployment: "true" +#Configuration +CDvs-api-INT-TEST.EMEA-PreProd: +- name: CD_vs-api INT-TEST +- mzName: CD_vs-api/management-zone/CDvs-api.name +- mzId: CD_vs-api/management-zone/CDvs-api.id +- tag: vs-api +- skipDeployment: "false" +CDvs-api-INT-TEST.NA-PreProd: +- name: CD_vs-api INT-TEST +- mzName: CD_vs-api/management-zone/CDvs-api.name +- mzId: CD_vs-api/management-zone/CDvs-api.id +- env: INT +- skipDeployment: "false" +CDvs-api-INT-TEST.CN-PreProd: +- name: CD_vs-api INT-TEST +- mzName: CD_vs-api/management-zone/CDvs-api.name +- mzId: CD_vs-api/management-zone/CDvs-api.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vs-api/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_vs-api/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vs-api/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vs-api/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_vs-api/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vs-api/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vs-api/management-zone/README.md b/BMW-Dynatrace-config/CD_vs-api/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vs-api/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_vs-api/management-zone/default.json b/BMW-Dynatrace-config/CD_vs-api/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_vs-api/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vs-api/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_vs-api/management-zone/management-zone.yaml new file mode 100644 index 00000000..a3f61ab2 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vs-api/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDvs-api: default.json + +CDvs-api: +- name: CD_vs-api +- tag: vs-api diff --git a/BMW-Dynatrace-config/CD_vs-api/notification/README.md b/BMW-Dynatrace-config/CD_vs-api/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vs-api/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vs-api/notification/email.json b/BMW-Dynatrace-config/CD_vs-api/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vs-api/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vs-api/notification/msTeams.json b/BMW-Dynatrace-config/CD_vs-api/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vs-api/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vs-api/notification/notification.yaml b/BMW-Dynatrace-config/CD_vs-api/notification/notification.yaml new file mode 100644 index 00000000..2256114d --- /dev/null +++ b/BMW-Dynatrace-config/CD_vs-api/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDvs-api-PROD: msTeams.json +- CDvs-api-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvs-api-PROD: +- name: CD_vs-api PROD +- alertingProfile: CD_vs-api/alerting-profile/CDvs-api-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvs-api-PROD.EMEA-Prod: +- name: CD_vs-api PROD +- alertingProfile: CD_vs-api/alerting-profile/CDvs-api-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvs-api-PROD.NA-Prod: +- name: CD_vs-api PROD +- alertingProfile: CD_vs-api/alerting-profile/CDvs-api-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDvs-api-PROD.CN-Prod: +- name: CD_vs-api PROD +- alertingProfile: CD_vs-api/alerting-profile/CDvs-api-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDvs-api-INT: +- name: CD_vs-api INT +- alertingProfile: CD_vs-api/alerting-profile/CDvs-api-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDvs-api-INT.EMEA-PreProd: +- name: CD_vs-api INT +- alertingProfile: CD_vs-api/alerting-profile/CDvs-api-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvs-api-INT.NA-PreProd: +- name: CD_vs-api INT +- alertingProfile: CD_vs-api/alerting-profile/CDvs-api-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDvs-api-INT.CN-PreProd: +- name: CD_vs-api INT +- alertingProfile: CD_vs-api/alerting-profile/CDvs-api-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vs-api/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_vs-api/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_vs-api/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vs-api/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_vs-api/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_vs-api/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vs-api/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_vs-api/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..62eb2762 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vs-api/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- vs-api: default.json + +vs-api: +- name: CD_vs-api - +- mzName: CD_vs-api/management-zone/CDvs-api.name +- mzId: CD_vs-api/management-zone/CDvs-api.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_webapi/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_webapi/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..15ca33aa --- /dev/null +++ b/BMW-Dynatrace-config/CD_webapi/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDwebapi-PROD: default.json +- CDwebapi-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDwebapi-PROD: +- name: CD_webapi PROD +- tag: webapi +- mzId: CD_webapi/management-zone/CDwebapi.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDwebapi-PROD.EMEA-Prod: +- name: CD_webapi PROD +- tag: webapi +- mzId: CD_webapi/management-zone/CDwebapi.id +- env: PROD +- skipDeployment: "false" +CDwebapi-PROD.NA-Prod: +- name: CD_webapi PROD +- tag: webapi +- mzId: CD_webapi/management-zone/CDwebapi.id +- env: PROD +- skipDeployment: "false" +CDwebapi-PROD.CN-Prod: +- name: CD_webapi PROD +- tag: webapi +- mzId: CD_webapi/management-zone/CDwebapi.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDwebapi-INT: +- name: CD_webapi INT +- tag: webapi +- mzId: CD_webapi/management-zone/CDwebapi.id +- env: INT +- skipDeployment: "true" +#Configuration +CDwebapi-INT.EMEA-PreProd: +- name: CD_webapi INT +- tag: webapi +- mzId: CD_webapi/management-zone/CDwebapi.id +- env: INT +- skipDeployment: "false" +CDwebapi-INT.NA-PreProd: +- name: CD_webapi INT +- tag: webapi +- mzId: CD_webapi/management-zone/CDwebapi.id +- env: INT +- skipDeployment: "false" +CDwebapi-INT.CN-PreProd: +- name: CD_webapi INT +- tag: webapi +- mzId: CD_webapi/management-zone/CDwebapi.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_webapi/alerting-profile/default.json b/BMW-Dynatrace-config/CD_webapi/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_webapi/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_webapi/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_webapi/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_webapi/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_webapi/custom-service-java/README.md b/BMW-Dynatrace-config/CD_webapi/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_webapi/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_webapi/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_webapi/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_webapi/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_webapi/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_webapi/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_webapi/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_webapi/dashboard/README.md b/BMW-Dynatrace-config/CD_webapi/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_webapi/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_webapi/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_webapi/dashboard/dashboard.yaml new file mode 100644 index 00000000..2118f8fc --- /dev/null +++ b/BMW-Dynatrace-config/CD_webapi/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDwebapi-PROD-E2E: defaultPRODE2E.json +- CDwebapi-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDwebapi-PROD-E2E: +- name: CD_webapi PROD-E2E +- mzName: CD_webapi/management-zone/CDwebapi.name +- mzId: CD_webapi/management-zone/CDwebapi.id +- skipDeployment: "true" +#Configuration +CDwebapi-PROD-E2E.EMEA-Prod: +- name: CD_webapi PROD-E2E +- mzName: CD_webapi/management-zone/CDwebapi.name +- mzId: CD_webapi/management-zone/CDwebapi.id +- tag: webapi +- skipDeployment: "false" +CDwebapi-PROD-E2E.NA-Prod: +- name: CD_webapi PROD-E2E +- mzName: CD_webapi/management-zone/CDwebapi.name +- mzId: CD_webapi/management-zone/CDwebapi.id +- tag: webapi +- skipDeployment: "false" +CDwebapi-PROD-E2E.CN-Prod: +- name: CD_webapi PROD-E2E +- mzName: CD_webapi/management-zone/CDwebapi.name +- mzId: CD_webapi/management-zone/CDwebapi.id +- tag: webapi +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDwebapi-INT-TEST: +- name: CD_webapi INT-TEST +- mzName: CD_webapi/management-zone/CDwebapi.name +- mzId: CD_webapi/management-zone/CDwebapi.id +- tag: webapi +- skipDeployment: "true" +#Configuration +CDwebapi-INT-TEST.EMEA-PreProd: +- name: CD_webapi INT-TEST +- mzName: CD_webapi/management-zone/CDwebapi.name +- mzId: CD_webapi/management-zone/CDwebapi.id +- tag: webapi +- skipDeployment: "false" +CDwebapi-INT-TEST.NA-PreProd: +- name: CD_webapi INT-TEST +- mzName: CD_webapi/management-zone/CDwebapi.name +- mzId: CD_webapi/management-zone/CDwebapi.id +- env: INT +- skipDeployment: "false" +CDwebapi-INT-TEST.CN-PreProd: +- name: CD_webapi INT-TEST +- mzName: CD_webapi/management-zone/CDwebapi.name +- mzId: CD_webapi/management-zone/CDwebapi.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_webapi/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_webapi/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_webapi/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_webapi/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_webapi/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_webapi/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_webapi/management-zone/README.md b/BMW-Dynatrace-config/CD_webapi/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_webapi/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_webapi/management-zone/default.json b/BMW-Dynatrace-config/CD_webapi/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_webapi/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_webapi/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_webapi/management-zone/management-zone.yaml new file mode 100644 index 00000000..fa5f6e6f --- /dev/null +++ b/BMW-Dynatrace-config/CD_webapi/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDwebapi: default.json + +CDwebapi: +- name: CD_webapi +- tag: webapi diff --git a/BMW-Dynatrace-config/CD_webapi/notification/README.md b/BMW-Dynatrace-config/CD_webapi/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_webapi/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_webapi/notification/email.json b/BMW-Dynatrace-config/CD_webapi/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_webapi/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_webapi/notification/msTeams.json b/BMW-Dynatrace-config/CD_webapi/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_webapi/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_webapi/notification/notification.yaml b/BMW-Dynatrace-config/CD_webapi/notification/notification.yaml new file mode 100644 index 00000000..ee9ae360 --- /dev/null +++ b/BMW-Dynatrace-config/CD_webapi/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDwebapi-PROD: msTeams.json +- CDwebapi-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDwebapi-PROD: +- name: CD_webapi PROD +- alertingProfile: CD_webapi/alerting-profile/CDwebapi-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDwebapi-PROD.EMEA-Prod: +- name: CD_webapi PROD +- alertingProfile: CD_webapi/alerting-profile/CDwebapi-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDwebapi-PROD.NA-Prod: +- name: CD_webapi PROD +- alertingProfile: CD_webapi/alerting-profile/CDwebapi-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDwebapi-PROD.CN-Prod: +- name: CD_webapi PROD +- alertingProfile: CD_webapi/alerting-profile/CDwebapi-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDwebapi-INT: +- name: CD_webapi INT +- alertingProfile: CD_webapi/alerting-profile/CDwebapi-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDwebapi-INT.EMEA-PreProd: +- name: CD_webapi INT +- alertingProfile: CD_webapi/alerting-profile/CDwebapi-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDwebapi-INT.NA-PreProd: +- name: CD_webapi INT +- alertingProfile: CD_webapi/alerting-profile/CDwebapi-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDwebapi-INT.CN-PreProd: +- name: CD_webapi INT +- alertingProfile: CD_webapi/alerting-profile/CDwebapi-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_webapi/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_webapi/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_webapi/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_webapi/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_webapi/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_webapi/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_webapi/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_webapi/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..550e6c71 --- /dev/null +++ b/BMW-Dynatrace-config/CD_webapi/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- webapi: default.json + +webapi: +- name: CD_webapi - +- mzName: CD_webapi/management-zone/CDwebapi.name +- mzId: CD_webapi/management-zone/CDwebapi.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_wlmanager/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_wlmanager/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..8d190c70 --- /dev/null +++ b/BMW-Dynatrace-config/CD_wlmanager/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDwlmanager-PROD: default.json +- CDwlmanager-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDwlmanager-PROD: +- name: CD_wlmanager PROD +- tag: wlmanager +- mzId: CD_wlmanager/management-zone/CDwlmanager.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDwlmanager-PROD.EMEA-Prod: +- name: CD_wlmanager PROD +- tag: wlmanager +- mzId: CD_wlmanager/management-zone/CDwlmanager.id +- env: PROD +- skipDeployment: "false" +CDwlmanager-PROD.NA-Prod: +- name: CD_wlmanager PROD +- tag: wlmanager +- mzId: CD_wlmanager/management-zone/CDwlmanager.id +- env: PROD +- skipDeployment: "false" +CDwlmanager-PROD.CN-Prod: +- name: CD_wlmanager PROD +- tag: wlmanager +- mzId: CD_wlmanager/management-zone/CDwlmanager.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDwlmanager-INT: +- name: CD_wlmanager INT +- tag: wlmanager +- mzId: CD_wlmanager/management-zone/CDwlmanager.id +- env: INT +- skipDeployment: "true" +#Configuration +CDwlmanager-INT.EMEA-PreProd: +- name: CD_wlmanager INT +- tag: wlmanager +- mzId: CD_wlmanager/management-zone/CDwlmanager.id +- env: INT +- skipDeployment: "false" +CDwlmanager-INT.NA-PreProd: +- name: CD_wlmanager INT +- tag: wlmanager +- mzId: CD_wlmanager/management-zone/CDwlmanager.id +- env: INT +- skipDeployment: "false" +CDwlmanager-INT.CN-PreProd: +- name: CD_wlmanager INT +- tag: wlmanager +- mzId: CD_wlmanager/management-zone/CDwlmanager.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_wlmanager/alerting-profile/default.json b/BMW-Dynatrace-config/CD_wlmanager/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_wlmanager/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_wlmanager/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_wlmanager/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_wlmanager/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_wlmanager/custom-service-java/README.md b/BMW-Dynatrace-config/CD_wlmanager/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_wlmanager/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_wlmanager/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_wlmanager/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_wlmanager/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_wlmanager/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_wlmanager/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_wlmanager/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_wlmanager/dashboard/README.md b/BMW-Dynatrace-config/CD_wlmanager/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_wlmanager/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_wlmanager/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_wlmanager/dashboard/dashboard.yaml new file mode 100644 index 00000000..bd8d9455 --- /dev/null +++ b/BMW-Dynatrace-config/CD_wlmanager/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDwlmanager-PROD-E2E: defaultPRODE2E.json +- CDwlmanager-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDwlmanager-PROD-E2E: +- name: CD_wlmanager PROD-E2E +- mzName: CD_wlmanager/management-zone/CDwlmanager.name +- mzId: CD_wlmanager/management-zone/CDwlmanager.id +- skipDeployment: "true" +#Configuration +CDwlmanager-PROD-E2E.EMEA-Prod: +- name: CD_wlmanager PROD-E2E +- mzName: CD_wlmanager/management-zone/CDwlmanager.name +- mzId: CD_wlmanager/management-zone/CDwlmanager.id +- tag: wlmanager +- skipDeployment: "false" +CDwlmanager-PROD-E2E.NA-Prod: +- name: CD_wlmanager PROD-E2E +- mzName: CD_wlmanager/management-zone/CDwlmanager.name +- mzId: CD_wlmanager/management-zone/CDwlmanager.id +- tag: wlmanager +- skipDeployment: "false" +CDwlmanager-PROD-E2E.CN-Prod: +- name: CD_wlmanager PROD-E2E +- mzName: CD_wlmanager/management-zone/CDwlmanager.name +- mzId: CD_wlmanager/management-zone/CDwlmanager.id +- tag: wlmanager +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDwlmanager-INT-TEST: +- name: CD_wlmanager INT-TEST +- mzName: CD_wlmanager/management-zone/CDwlmanager.name +- mzId: CD_wlmanager/management-zone/CDwlmanager.id +- tag: wlmanager +- skipDeployment: "true" +#Configuration +CDwlmanager-INT-TEST.EMEA-PreProd: +- name: CD_wlmanager INT-TEST +- mzName: CD_wlmanager/management-zone/CDwlmanager.name +- mzId: CD_wlmanager/management-zone/CDwlmanager.id +- tag: wlmanager +- skipDeployment: "false" +CDwlmanager-INT-TEST.NA-PreProd: +- name: CD_wlmanager INT-TEST +- mzName: CD_wlmanager/management-zone/CDwlmanager.name +- mzId: CD_wlmanager/management-zone/CDwlmanager.id +- env: INT +- skipDeployment: "false" +CDwlmanager-INT-TEST.CN-PreProd: +- name: CD_wlmanager INT-TEST +- mzName: CD_wlmanager/management-zone/CDwlmanager.name +- mzId: CD_wlmanager/management-zone/CDwlmanager.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_wlmanager/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_wlmanager/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_wlmanager/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_wlmanager/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_wlmanager/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_wlmanager/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_wlmanager/management-zone/README.md b/BMW-Dynatrace-config/CD_wlmanager/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_wlmanager/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_wlmanager/management-zone/default.json b/BMW-Dynatrace-config/CD_wlmanager/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_wlmanager/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_wlmanager/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_wlmanager/management-zone/management-zone.yaml new file mode 100644 index 00000000..634b3172 --- /dev/null +++ b/BMW-Dynatrace-config/CD_wlmanager/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDwlmanager: default.json + +CDwlmanager: +- name: CD_wlmanager +- tag: wlmanager diff --git a/BMW-Dynatrace-config/CD_wlmanager/notification/README.md b/BMW-Dynatrace-config/CD_wlmanager/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_wlmanager/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_wlmanager/notification/email.json b/BMW-Dynatrace-config/CD_wlmanager/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_wlmanager/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_wlmanager/notification/msTeams.json b/BMW-Dynatrace-config/CD_wlmanager/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_wlmanager/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_wlmanager/notification/notification.yaml b/BMW-Dynatrace-config/CD_wlmanager/notification/notification.yaml new file mode 100644 index 00000000..90541ea0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_wlmanager/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDwlmanager-PROD: msTeams.json +- CDwlmanager-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDwlmanager-PROD: +- name: CD_wlmanager PROD +- alertingProfile: CD_wlmanager/alerting-profile/CDwlmanager-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDwlmanager-PROD.EMEA-Prod: +- name: CD_wlmanager PROD +- alertingProfile: CD_wlmanager/alerting-profile/CDwlmanager-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDwlmanager-PROD.NA-Prod: +- name: CD_wlmanager PROD +- alertingProfile: CD_wlmanager/alerting-profile/CDwlmanager-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDwlmanager-PROD.CN-Prod: +- name: CD_wlmanager PROD +- alertingProfile: CD_wlmanager/alerting-profile/CDwlmanager-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDwlmanager-INT: +- name: CD_wlmanager INT +- alertingProfile: CD_wlmanager/alerting-profile/CDwlmanager-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDwlmanager-INT.EMEA-PreProd: +- name: CD_wlmanager INT +- alertingProfile: CD_wlmanager/alerting-profile/CDwlmanager-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDwlmanager-INT.NA-PreProd: +- name: CD_wlmanager INT +- alertingProfile: CD_wlmanager/alerting-profile/CDwlmanager-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDwlmanager-INT.CN-PreProd: +- name: CD_wlmanager INT +- alertingProfile: CD_wlmanager/alerting-profile/CDwlmanager-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_wlmanager/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_wlmanager/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_wlmanager/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_wlmanager/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_wlmanager/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_wlmanager/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_wlmanager/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_wlmanager/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..14a0f4b4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_wlmanager/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- wlmanager: default.json + +wlmanager: +- name: CD_wlmanager - +- mzName: CD_wlmanager/management-zone/CDwlmanager.name +- mzId: CD_wlmanager/management-zone/CDwlmanager.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_xfcd/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_xfcd/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..d30420a2 --- /dev/null +++ b/BMW-Dynatrace-config/CD_xfcd/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDxfcd-PROD: default.json +- CDxfcd-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDxfcd-PROD: +- name: CD_xfcd PROD +- tag: xfcd +- mzId: CD_xfcd/management-zone/CDxfcd.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDxfcd-PROD.EMEA-Prod: +- name: CD_xfcd PROD +- tag: xfcd +- mzId: CD_xfcd/management-zone/CDxfcd.id +- env: PROD +- skipDeployment: "false" +CDxfcd-PROD.NA-Prod: +- name: CD_xfcd PROD +- tag: xfcd +- mzId: CD_xfcd/management-zone/CDxfcd.id +- env: PROD +- skipDeployment: "false" +CDxfcd-PROD.CN-Prod: +- name: CD_xfcd PROD +- tag: xfcd +- mzId: CD_xfcd/management-zone/CDxfcd.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDxfcd-INT: +- name: CD_xfcd INT +- tag: xfcd +- mzId: CD_xfcd/management-zone/CDxfcd.id +- env: INT +- skipDeployment: "true" +#Configuration +CDxfcd-INT.EMEA-PreProd: +- name: CD_xfcd INT +- tag: xfcd +- mzId: CD_xfcd/management-zone/CDxfcd.id +- env: INT +- skipDeployment: "false" +CDxfcd-INT.NA-PreProd: +- name: CD_xfcd INT +- tag: xfcd +- mzId: CD_xfcd/management-zone/CDxfcd.id +- env: INT +- skipDeployment: "false" +CDxfcd-INT.CN-PreProd: +- name: CD_xfcd INT +- tag: xfcd +- mzId: CD_xfcd/management-zone/CDxfcd.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_xfcd/alerting-profile/default.json b/BMW-Dynatrace-config/CD_xfcd/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_xfcd/alerting-profile/default.json @@ -0,0 +1,103 @@ +{ + "displayName": "{{.name}}", + "eventTypeFilters": [], + "managementZoneId": "{{.mzId}}", + "mzId": "{{.mzId}}", + "rules": [ + { + "delayInMinutes": 0, + "severityLevel": "AVAILABILITY", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "ERROR", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "PERFORMANCE", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 30, + "severityLevel": "RESOURCE_CONTENTION", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + }, + { + "delayInMinutes": 10, + "severityLevel": "CUSTOM_ALERT", + "tagFilter": { + "includeMode": "INCLUDE_ALL", + "tagFilters": [ + { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "context": "CONTEXTLESS", + "key": "Environment", + "value": "{{.env}}" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_xfcd/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_xfcd/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_xfcd/calculated-metrics-service/README.md @@ -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_) + +The OPAPM team will proceed creating the metric and updating your configuration in monaco. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_xfcd/custom-service-java/README.md b/BMW-Dynatrace-config/CD_xfcd/custom-service-java/README.md new file mode 100644 index 00000000..d41c4c77 --- /dev/null +++ b/BMW-Dynatrace-config/CD_xfcd/custom-service-java/README.md @@ -0,0 +1,30 @@ + +## What is a custom service in Dynatrace? +- *If your application's services aren't built on standard technologies, they may not be recognized out-of-the box.* +- *You can monitor these technologies, but you'll need to define them as custom services with specific service entry points.* +- *Another use case for custom services are microservices that are used by a larger application that aren't exposed via communication technologies.* + +## How to create a custom service? +1. Open the file *custom-service-java.yaml* under your *CD_/custom-service-java* configuration folder. +2. Use customService1 as a template. Copy and paste it below, changing the skipDeployment to "false". +3. Fill up all the remaining inputs with the details of the endpoint you're interested to monitor. (className, methodName, etc...) +4. Commit and pull request to merge the branch to the master: + `git add ` + `git commit -m " configuration changes"` + `git push -u origin ` +5. Restart the application where the custom service has been created. +6. Check if the custom service appears in Dynatrace. + +Notes: + - As this configuration needs a restart, it's better to create it in a non-Prod application. + - The custom service will appear in Dynatrace iff there's traffic going through. + +## What if i have multiple classes? +1. Clone *template-1-1.json* to a new one called *template-2-1.json*. +2. Edit *template-2-1.json* adding a 2nd rule separated with a coma. +3. For the 2nd rule, change the name of the {{.values}} to {{.values2}} i.e. +4. The template is ready to be used in the YAML file. + +## What if i have multiple methods? +1. Same process as before, just call it template-1-2.json +2. In this way you can extend to a custom service with n classes and k methods: template-n-k.json \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_xfcd/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_xfcd/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_xfcd/custom-service-java/custom-service-java.yaml @@ -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" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_xfcd/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_xfcd/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_xfcd/custom-service-java/template-1-1.json @@ -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}}" + } + ] + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_xfcd/dashboard/README.md b/BMW-Dynatrace-config/CD_xfcd/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_xfcd/dashboard/README.md @@ -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 + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_xfcd/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_xfcd/dashboard/dashboard.yaml new file mode 100644 index 00000000..e64d8108 --- /dev/null +++ b/BMW-Dynatrace-config/CD_xfcd/dashboard/dashboard.yaml @@ -0,0 +1,59 @@ +config: +- CDxfcd-PROD-E2E: defaultPRODE2E.json +- CDxfcd-INT-TEST: defaultINTTEST.json + +#PROD-E2E dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDxfcd-PROD-E2E: +- name: CD_xfcd PROD-E2E +- mzName: CD_xfcd/management-zone/CDxfcd.name +- mzId: CD_xfcd/management-zone/CDxfcd.id +- skipDeployment: "true" +#Configuration +CDxfcd-PROD-E2E.EMEA-Prod: +- name: CD_xfcd PROD-E2E +- mzName: CD_xfcd/management-zone/CDxfcd.name +- mzId: CD_xfcd/management-zone/CDxfcd.id +- tag: xfcd +- skipDeployment: "false" +CDxfcd-PROD-E2E.NA-Prod: +- name: CD_xfcd PROD-E2E +- mzName: CD_xfcd/management-zone/CDxfcd.name +- mzId: CD_xfcd/management-zone/CDxfcd.id +- tag: xfcd +- skipDeployment: "false" +CDxfcd-PROD-E2E.CN-Prod: +- name: CD_xfcd PROD-E2E +- mzName: CD_xfcd/management-zone/CDxfcd.name +- mzId: CD_xfcd/management-zone/CDxfcd.id +- tag: xfcd +- skipDeployment: "false" + + +#INT-TEST dashboards for EMEA/NA/CN PreProd +#Dry-run needed for all hubs +CDxfcd-INT-TEST: +- name: CD_xfcd INT-TEST +- mzName: CD_xfcd/management-zone/CDxfcd.name +- mzId: CD_xfcd/management-zone/CDxfcd.id +- tag: xfcd +- skipDeployment: "true" +#Configuration +CDxfcd-INT-TEST.EMEA-PreProd: +- name: CD_xfcd INT-TEST +- mzName: CD_xfcd/management-zone/CDxfcd.name +- mzId: CD_xfcd/management-zone/CDxfcd.id +- tag: xfcd +- skipDeployment: "false" +CDxfcd-INT-TEST.NA-PreProd: +- name: CD_xfcd INT-TEST +- mzName: CD_xfcd/management-zone/CDxfcd.name +- mzId: CD_xfcd/management-zone/CDxfcd.id +- env: INT +- skipDeployment: "false" +CDxfcd-INT-TEST.CN-PreProd: +- name: CD_xfcd INT-TEST +- mzName: CD_xfcd/management-zone/CDxfcd.name +- mzId: CD_xfcd/management-zone/CDxfcd.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_xfcd/dashboard/defaultINTTEST.json b/BMW-Dynatrace-config/CD_xfcd/dashboard/defaultINTTEST.json new file mode 100644 index 00000000..e08e9260 --- /dev/null +++ b/BMW-Dynatrace-config/CD_xfcd/dashboard/defaultINTTEST.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:INT" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:TEST" + ] + } + } + } + }, + { + "name": "Service1 - INT", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:INT" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:TEST" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - TEST (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - INT (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - TEST", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:TEST", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:INT" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_xfcd/dashboard/defaultPRODE2E.json b/BMW-Dynatrace-config/CD_xfcd/dashboard/defaultPRODE2E.json new file mode 100644 index 00000000..3bc85568 --- /dev/null +++ b/BMW-Dynatrace-config/CD_xfcd/dashboard/defaultPRODE2E.json @@ -0,0 +1,586 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.213.116.20210318-174118" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": false, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + }, + "tags": [ + "{{.mzName}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 38, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:PROD" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 114, + "left": 1596, + "width": 152, + "height": 152 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 1064, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 684, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Service1 - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 798, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:E2E" + ] + } + } + } + }, + { + "name": "Service1 - PROD", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 722, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 760, + "left": 38, + "width": 760, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Throughput 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:PROD" + ] + } + } + } + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 380, + "left": 798, + "width": 760, + "height": 266 + }, + "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": 1595276148986, + "customColor": "#ef651f" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:E2E" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 304, + "left": 38, + "width": 1520, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Failure rate - E2E (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Failure rate - PROD (HTTP 4xx/5xx errors)", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 342, + "left": 38, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 570, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "Overall Health - E2E", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 38, + "left": 798, + "width": 760, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 76, + "left": 1330, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 76, + "left": 304, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 798, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:E2E", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 76, + "left": 38, + "width": 228, + "height": 190 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Component:{{.tag}}", + "Environment:PROD" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_xfcd/management-zone/README.md b/BMW-Dynatrace-config/CD_xfcd/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_xfcd/management-zone/README.md @@ -0,0 +1,76 @@ +## Management Zones configuration + +### Excluding noisy services + +*If you find services that are not relevant for the analysis, you can exclude them from the MZ.* + +#### HealthResource, PingResource, PrometheusResource services + +*After the deployment of the OneAgent, your services should appear under Transactions & Services. A good practice would be to exclude* +*the ones that are not relevant for monitoring. i.e. For some BMW's teams, HealthResource, PingResource, PrometheusResource have been excluded.* + +**How to exclude HealthResource?** +1. Open the file *default.json* configuration under the *CD_/management-zone/* folder. +2. Copy the following rule template: + ``` + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + ``` +2. Add it under the `"type": "SERVICE"` rule's conditions. It should look like this: + ``` + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + }, + { + "comparisonInfo": { + "caseSensitive": true, + "negate": true, + "operator": "CONTAINS", + "type": "STRING", + "value": "HealthResource" + }, + "key": { + "attribute": "SERVICE_NAME" + } + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + } + ``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +Note: you can use the same logic to exclude (or include) any other entity to your Management Zone. diff --git a/BMW-Dynatrace-config/CD_xfcd/management-zone/default.json b/BMW-Dynatrace-config/CD_xfcd/management-zone/default.json new file mode 100644 index 00000000..e827aaff --- /dev/null +++ b/BMW-Dynatrace-config/CD_xfcd/management-zone/default.json @@ -0,0 +1,76 @@ +{ + "dimensionalRules": [], + "name": "{{.name}}", + "rules": [ + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "SERVICE_TO_PROCESS_GROUP_LIKE", + "SERVICE_TO_HOST_LIKE" + ], + "type": "SERVICE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "enabled": true, + "propagationTypes": [ + "PROCESS_GROUP_TO_HOST" + ], + "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_xfcd/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_xfcd/management-zone/management-zone.yaml new file mode 100644 index 00000000..313b027b --- /dev/null +++ b/BMW-Dynatrace-config/CD_xfcd/management-zone/management-zone.yaml @@ -0,0 +1,6 @@ +config: +- CDxfcd: default.json + +CDxfcd: +- name: CD_xfcd +- tag: xfcd diff --git a/BMW-Dynatrace-config/CD_xfcd/notification/README.md b/BMW-Dynatrace-config/CD_xfcd/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_xfcd/notification/README.md @@ -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 `-PROD.EMEA-Prod`: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: + - skipDeployment: "false" + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` +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: +`-.-:` + +### Email + +*The team prefers to be alerted via email, not MS Teams* + +1. Keep the MS Teams integration disabled, with the https://empty webhook: + ``` + -PROD.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - webhook: https://empty + - skipDeployment: "false" + ``` +2. Create a new configuration template under config, using the email template: + ``` + config: + - CDemail: email.json + ``` +3. Describe the configuration below, using the following template: + ``` + CDemail.EMEA-Prod: + - name: CD_ PROD + - alertingProfile: CD_/alerting-profile/CD-PROD.id + - receivers: distributionEmailexample@bmw.de` + ``` +4. Save and commit changes: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` + +### ITSM +Coming soon! \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_xfcd/notification/email.json b/BMW-Dynatrace-config/CD_xfcd/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_xfcd/notification/email.json @@ -0,0 +1,13 @@ +{ + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "bccReceivers": [], + "body": "{ProblemDetailsHTML}", + "ccReceivers": [], + "name": "{{.name}}", + "receivers": [ + "{{.receivers}}" + ], + "subject": "{State} Problem {ProblemID}: {ImpactedEntity}", + "type": "EMAIL" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_xfcd/notification/msTeams.json b/BMW-Dynatrace-config/CD_xfcd/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_xfcd/notification/msTeams.json @@ -0,0 +1,11 @@ +{ + "acceptAnyCertificate": false, + "active": true, + "alertingProfile": "{{.alertingProfile}}", + "headers": [], + "name": "{{.name}}", + "notifyEventMergesEnabled": false, + "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", + "type": "WEBHOOK", + "url": "{{.webhook}}" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_xfcd/notification/notification.yaml b/BMW-Dynatrace-config/CD_xfcd/notification/notification.yaml new file mode 100644 index 00000000..a5bd72f9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_xfcd/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDxfcd-PROD: msTeams.json +- CDxfcd-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDxfcd-PROD: +- name: CD_xfcd PROD +- alertingProfile: CD_xfcd/alerting-profile/CDxfcd-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDxfcd-PROD.EMEA-Prod: +- name: CD_xfcd PROD +- alertingProfile: CD_xfcd/alerting-profile/CDxfcd-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDxfcd-PROD.NA-Prod: +- name: CD_xfcd PROD +- alertingProfile: CD_xfcd/alerting-profile/CDxfcd-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDxfcd-PROD.CN-Prod: +- name: CD_xfcd PROD +- alertingProfile: CD_xfcd/alerting-profile/CDxfcd-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDxfcd-INT: +- name: CD_xfcd INT +- alertingProfile: CD_xfcd/alerting-profile/CDxfcd-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDxfcd-INT.EMEA-PreProd: +- name: CD_xfcd INT +- alertingProfile: CD_xfcd/alerting-profile/CDxfcd-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDxfcd-INT.NA-PreProd: +- name: CD_xfcd INT +- alertingProfile: CD_xfcd/alerting-profile/CDxfcd-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDxfcd-INT.CN-PreProd: +- name: CD_xfcd INT +- alertingProfile: CD_xfcd/alerting-profile/CDxfcd-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_xfcd/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_xfcd/synthetic-monitor/README.md new file mode 100644 index 00000000..92e734fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_xfcd/synthetic-monitor/README.md @@ -0,0 +1,37 @@ +# Synthetic Configuration + +To calculate the Availability KPI, a synthetic must be configured. + +1. Modify the synthetic-monitor.yaml file, providing: + - **Endpoint**: url intended to check the availability. + - **Location**: + - *synthetic private location*: If the endpoint is reachable within the BMW network. + ``` + - location: BMW-Dynatrace-config/00_Global-Config/synthetic-location/BMW-AWS-Frankfurt.id + ``` + - *synthetic public location*: If the endpoint is reachable from the internet. + ``` + - location: GEOLOCATION-45AB48D9D6925ECC + ``` +2. Change `skipDeployment` to false. + +i.e. +``` +config: +- my-synthetic: default.json + +my-synthetic: +- name: CD_BMW - bmw.com +- mzName: CD_google/management-zone/CDgoogle.name +- mzId: CD_google/management-zone/CDgoogle.id +- endpoint: https://google.com +- location: GEOLOCATION-45AB48D9D6925ECC +- skipDeployment: "false" +``` + +3. Commit and pull request to merge the branch to the master: + ``` + git add + git commit -m " configuration changes" + git push -u origin + ``` \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_xfcd/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_xfcd/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_xfcd/synthetic-monitor/default.json @@ -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" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_xfcd/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_xfcd/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..90a4e79e --- /dev/null +++ b/BMW-Dynatrace-config/CD_xfcd/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- xfcd: default.json + +xfcd: +- name: CD_xfcd - +- mzName: CD_xfcd/management-zone/CDxfcd.name +- mzId: CD_xfcd/management-zone/CDxfcd.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file